Oracle SQL:按数字和字母顺序排序

时间:2018-11-29 12:29:21

标签: sql oracle

我有一个名为“ countries”的表和一个名为“ val”的列,该列为VARCHAR2(2 CHAR)。我对此列中的值顺序有一些疑问。 例如,我不会写“ val”中的所有值(359):

'AD','EC','XX','1C','1D','MR','4R','1E','TO','SK'

我想按数字顺序而不是字母顺序对值进行排序:

'1C','1D','1E','4R','AD','EC','MR','SK','TO','XX'.

我写了这样的东西:

SELECT val FROM countries ORDER BY CASE WHEN val LIKE '[1-9]%' THEN 0 ELSE 1 END ASC; 一切正常,除了前两个值“ 1C”和“ 1D”显示在表的末尾而不是开头。真奇怪我有Oracle 12c。 我需要帮助!

1 个答案:

答案 0 :(得分:0)

请勿使用LIKE。如果您只关心第一个值,则可以使用字符串比较:

ORDER BY (CASE WHEN SUBSTR(val, 1, 1) BETWEEN '0' AND '9'
               THEN 0 ELSE 1
          END) ASC,
         val