如何选择混合字符串/ int列的最大值?

Cai*_*der 13 mysql select mixed max

假设我有一个表,其中包含发票号的列,数据类型为VARCHAR,其中包含混合的字符串/ int值,如:

invoice_number
**************
    HKL1
    HKL2
    HKL3
    .....
    HKL12
    HKL13
    HKL14
    HKL15
Run Code Online (Sandbox Code Playgroud)

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

SELECT MAX( invoice_number )
FROM `invoice_header`
Run Code Online (Sandbox Code Playgroud)

nak*_*spy 23

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

如果您的所有发票编号都以HKL,那么您可以使用:

SELECT MAX(CAST(SUBSTRING(invoice_number, 4, length(invoice_number)-3) AS UNSIGNED)) FROM table
Run Code Online (Sandbox Code Playgroud)

它接受invoice_number,不包括3个第一个字符,转换为int,并从中选择max.


小智 5

从invoice_header中选择ifnull(max(CONVERT(invoice_number,SIGNED INTEGER)),0)其中invoice_number REGEXP'^ [0-9] + $'


Ket*_*bey 5

经过一段时间的搜索,我找到了最简单的解决方案。

select MAX(CAST(REPLACE(REPLACE(invoice_number , 'HKL', ''), '', '') as int)) from invoice_header
Run Code Online (Sandbox Code Playgroud)