mysql - funciones - primera letra sql
cómo seleccionar el máximo de cadena mixta/columna int? (5)
Tu problema es más de definición y diseño.
Seleccione el número de factura con la ID o FECHA más alta o, si realmente no se correlaciona con el "número de factura más alto", defina una columna adicional, que se correlaciona con el número de factura y sea lo suficientemente simple para que la base de datos pobre comprenda .
select INVOICE_NUMBER
from INVOICE_HEADER
order by ID desc limit 1;
No es que la base de datos no sea lo suficientemente inteligente ... es que estás haciendo una pregunta incorrecta.
Digamos que tengo una tabla que contiene una columna para el número de factura, el tipo de datos es VARCHAR con valores mixtos de cadena / int como:
invoice_number
**************
HKL1
HKL2
HKL3
.....
HKL12
HKL13
HKL14
HKL15
Intenté seleccionar máx., Pero regresa con "HKL9", no con el valor más alto "HKL15".
SELECT MAX( invoice_number )
FROM `invoice_header`
HKL9
(cadena) es mayor que HKL15
, porque se comparan como cadenas. Una forma de resolver su problema es definir una función de columna que devuelva solo la parte numérica del número de factura.
Si todos sus números de factura comienzan con HKL
, puede usar:
SELECT MAX(CAST(SUBSTRING(invoice_number, 4, length(invoice_number)-3) AS UNSIGNED)) FROM table
Toma el invoice_number excluyendo los 3 primeros caracteres, convierte a int, y selecciona máx.
seleccione ifnull (max (CONVERT (número de factura, SIGNED INTEGER)), 0) de invoice_header donde invoice_number REGEXP ''^ [0-9] + $''
Esto debería funcionar también
SELECT invoice_number
FROM invoice_header
ORDER BY LENGTH( invoice_number) DESC,invoice_number DESC
LIMIT 0,1
Después de un rato de búsqueda encontré la solución más fácil para esto.
select MAX(CAST(REPLACE(REPLACE(invoice_number , ''HKL'', ''''), '''', '''') as int)) from invoice_header