可以说我有一个表,其中包含发票编号列,数据类型为VARCHAR,具有混合的字符串/整数值,例如:
invoice_number ************** HKL1 HKL2 HKL3 ..... HKL12 HKL13 HKL14 HKL15
我试图选择最大值,但它返回的是“ HKL9”,而不是最高值“ HKL15”。
SELECT MAX( invoice_number ) FROM `invoice_header`
HKL9(字符串)大于HKL15,因为它们被比较为字符串。解决问题的一种方法是定义一个仅返回发票编号数字部分的列函数。
HKL9
HKL15
如果您的所有发票编号均以开头HKL,则可以使用:
HKL
SELECT MAX(CAST(SUBSTRING(invoice_number, 4, length(invoice_number)-3) AS UNSIGNED)) FROM table
它使用invoice_number(不包括前3个字符)转换为int,然后从中选择max。