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