4

谁能帮我看看我应该在我的 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 * 1l.unit_number + 0但他们没有工作。

我应该做一些ORDER有条件的,比如Case When IsNumeric(l.unit_number)

谢谢你。

4

1 回答 1

7

这将做到:

SELECT value
FROM Table1
ORDER BY value REGEXP '^[A-Za-z]+$'
        ,CAST(value as SIGNED INTEGER)
        ,CAST(REPLACE(value,'-','')AS SIGNED INTEGER)
        ,value

4个级别the ORDER BY

  1. REGEXP分配任何 alpha 线为 1,非 alpha 线为 0
  2. SIGNED INT按破折号前面的部分对所有数字进行排序。
  3. SIGNED INT删除破折号后,按破折号之后的部分对破折号之前具有相同值的任何项目进行排序。可能会取代 2 号,但如果出现这种情况,不想将 90-1 与 9-01 一样对待。
  4. 按字母顺序对字母进行排序。

演示:SQL 小提琴

于 2013-06-27T22:39:57.790 回答