任何人都可以帮我把我应该添加到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)
?
谢谢。
答案 0 :(得分:7)
这样做:
SELECT value
FROM Table1
ORDER BY value REGEXP '^[A-Za-z]+$'
,CAST(value as SIGNED INTEGER)
,CAST(REPLACE(value,'-','')AS SIGNED INTEGER)
,value
the ORDER BY
的4个等级:
REGEXP
指定任何alpha线a 1和非alphas a 0 SIGNED INT
按破折号前面的部分对所有数字进行排序。SIGNED INT
将短划线之前的任何项目排在破折号之后的部分。可能会取代2号,但如果出现这种情况,则不希望90-1与9-01相同。演示:SQL Fiddle