一尘不染

如何选择最大的混合字符串/整数列?

mysql

可以说我有一个表,其中包含发票编号列,数据类型为VARCHAR,具有混合的字符串/整数值,例如:

invoice_number
**************
    HKL1
    HKL2
    HKL3
    .....
    HKL12
    HKL13
    HKL14
    HKL15

我试图选择最大值,但它返回的是“ HKL9”,而不是最高值“ HKL15”。

SELECT MAX( invoice_number )
FROM `invoice_header`

阅读 232

收藏
2020-05-17

共1个答案

一尘不染

HKL9(字符串)大于HKL15,因为它们被比较为字符串。解决问题的一种方法是定义一个仅返回发票编号数字部分的列函数。

如果您的所有发票编号均以开头HKL,则可以使用:

SELECT MAX(CAST(SUBSTRING(invoice_number, 4, length(invoice_number)-3) AS UNSIGNED)) FROM table

它使用invoice_number(不包括前3个字符)转换为int,然后从中选择max。

2020-05-17