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] + $'
经过一段时间的搜索,我找到了最简单的解决方案。
select MAX(CAST(REPLACE(REPLACE(invoice_number , 'HKL', ''), '', '') as int)) from invoice_header
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38374 次 |
| 最近记录: |