primera letra funciones especificos contar concatenar caracteres caracter cadena buscar mysql select max mixed

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