SQL按字符串排序,数字显示在最后

时间:2017-02-20 13:44:26

标签: sql oracle sql-order-by

我有一个返回字符串列的查询,我希望按其排序。 当我按ASC / DESC排序时,我得到了相同的结果。 这是一个输出示例:

AVI
ksky site
Secure East
Shlomi
VSEStaging
1200165
120186
120186
120186
120032

但我想在字母字符串前面加上数字。 例如对于ASC:

1200165
120186
120186
120186
120032
AVI
ksky site
Secure East
Shlomi
VSEStaging

例如对于DESC:

VSEStaging
Shlomi
Secure East
ksky site
AVI
120032

我目前使用REGEX:

REGEXP_SUBSTR(UPPER(COLUMN_NAME), '^\D*') ,
TO_NUMBER(REGEXP_SUBSTR(UPPER(COLUMN_NAME), '\d+'))

请协助。

2 个答案:

答案 0 :(得分:4)

您可以使用regexp_like()。对于升序排序:

order by (case when regexp_like(col, '^[0-9]+$') then 1 else 2 end) asc,
         col asc

答案 1 :(得分:0)

你可以尝试不同的东西:

order by translate(upper(col), '1234567890', 'abcdefghij')