我正在尝试排序"自然而然地#34;在SQL中,我发现这个答案应该完全符合我的要求:
https://stackoverflow.com/a/17354420/7563153
但当我尝试在" SQL Fiddle"中重新创建它时。我无法让它发挥作用......
我做错了什么?
答案 0 :(得分:0)
对于您的给定数据库架构,您的尝试是否必要?
尝试这样的事情,
SELECT `test`
FROM table1
ORDER BY LENGTH(`test`),
`test`;
答案 1 :(得分:0)
假设(!)您的数据格式为" blabla-integer"使用一个且只有一个短划线(onClick
)将字母数字部分与整数部分分开,我会这样:
-
答案 2 :(得分:0)
您引用的示例与您自己的试用版之间的区别在于您的数据在同一字段中组合了数字和非数字字符,因此转换为整数不起作用(它只给出0)。您可以通过在选择列表中添加order by
表达式来直观显示查询无法解决的原因,如下所示:
SELECT test
,test REGEXP '^[A-Za-z]+$'
,CAST(test as SIGNED INTEGER)
,CAST(REPLACE(test,'-','')AS SIGNED INTEGER)
FROM table1
ORDER BY test REGEXP '^[A-Za-z]+$'
,CAST(test as SIGNED INTEGER)
,CAST(REPLACE(test,'-','')AS SIGNED INTEGER)
,test
您会看到它们都评估为0,这不会为您提供您正在寻找的排序顺序。
您需要将值的数字部分与非数字部分分开,然后单独对它们进行排序。像这样:
SELECT test
FROM table1
ORDER BY substring_index(test,'-',1)
,CAST(substring(test, locate('-', test)+1)AS SIGNED INTEGER)
,test
如果您的实际数据不像示例数据那样简单明了,则可能需要进行调整。