Cai*_*der 13 mysql select mixed max
假设我有一个表,其中包含发票号的列,数据类型为VARCHAR,其中包含混合的字符串/ int值,如:
invoice_number
**************
    HKL1
    HKL2
    HKL3
    .....
    HKL12
    HKL13
    HKL14
    HKL15
我试图选择它的最大值,但它返回"HKL9",而不是最高值"HKL15".
SELECT MAX( invoice_number )
FROM `invoice_header`
nak*_*spy 23
HKL9(字符串)大于HKL15,因为它们被比较为字符串.解决问题的一种方法是定义一个只返回发票号的数字部分的列函数.
如果您的所有发票编号都以HKL,那么您可以使用:
SELECT MAX(CAST(SUBSTRING(invoice_number, 4, length(invoice_number)-3) AS UNSIGNED)) FROM table
它接受invoice_number,不包括3个第一个字符,转换为int,并从中选择max.
小智 5
从invoice_header中选择ifnull(max(CONVERT(invoice_number,SIGNED INTEGER)),0)其中invoice_number REGEXP'^ [0-9] + $'
经过一段时间的搜索,我找到了最简单的解决方案。
select MAX(CAST(REPLACE(REPLACE(invoice_number , 'HKL', ''), '', '') as int)) from invoice_header