我有一个包含唯一列的数据库表,其中包含值
invid
----------
500
1000
B2222
A9998
A9999
A10000
问题每当我的查询max(invid)返回时A9999是什么解决方案
答案 0 :(得分:1)
试试这个
SELECT CONCAT('A', MAX(0+SUBSTRING(invid,2))) FROM your_table
问题是你是在尝试找到字母数字的最大值,在这种情况下A9999大于A10000,它与9999和10000不一样。
答案 1 :(得分:0)
您可以invid
SELECT t.invid, MAX(t.value) AS maxValue
FROM
(
SELECT invid,
CASE WHEN invid LIKE '[A-Z]%'
THEN CAST(SUBSTRING(invid, 2) AS UNSIGNED)
ELSE CAST(invid AS UNSIGNED)
END AS value
FROM yourTable
) t
列中的最大值invid
:
{{1}}
这假设{{1}}中的每个条目最多只有一个字母前缀该数字。这没有考虑到最大价值联系的可能性。
答案 2 :(得分:0)
最佳解决方案是通过将列更改为auto_increment来永久更正问题并删除A
字母。
否则您可以使用以下查询:
SELECT CONCAT('A'
, MAX(0+SUBSTRING(invid,2)))
FROM table