我有一个名为“ 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。
我需要帮助!
答案 0 :(得分:0)
请勿使用LIKE
。如果您只关心第一个值,则可以使用字符串比较:
ORDER BY (CASE WHEN SUBSTR(val, 1, 1) BETWEEN '0' AND '9'
THEN 0 ELSE 1
END) ASC,
val