任何人都可以借给我一个关于我应该附加到我的ORDER BY语句以自然地对这些值进行排序的方法:
1
10
2
22
20405-109
20405-101
20404-100
X
Z
D
理想情况下,我喜欢以下内容:
1
2
10
22
20404-100
20405-101
20405-109
D
X
Z
我目前正在使用:
ORDER BY t.property, l.unit_number
其中值为l.unit_number
我已经尝试过l.unit_number * 1和l.unit_number 0,但它们没有用.
我应该做一些ORDER条件,例如Case When IsNumeric(l.unit_number)?
谢谢.
解决方法:
这样做:
SELECT value
FROM Table1
ORDER BY value REGEXP '^[A-Za-z]+$'
,CAST(value as SIGNED INTEGER)
,CAST(REPLACE(value,'-','')AS SIGNED INTEGER)
,value
ORDER BY的4个级别:
> REGEXP将任何alpha行分配为1,将非alphas分配为0
> SIGNED INT按短划线前面的部分对所有数字进行排序.
>删除短划线后签名的INT将短划线之前的部分中任何具有相同值的项目排序.可能会取代2号,但如果出现这种情况,则不希望90-1与9-01相同.
>按字母顺序对字母进行排序.
标签:sql,mysql,sql-order-by
来源: https://codeday.me/bug/20190728/1566929.html