SQL 按字符串排序,数字最后出现
SQL Order by string, numbers appear last
我有一个查询 return 我想作为排序依据的字符串列。
当我按 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+'))
请协助。
您可以使用 regexp_like()
。对于升序排序:
order by (case when regexp_like(col, '^[0-9]+$') then 1 else 2 end) asc,
col asc
您可以像这样尝试不同的方法:
order by translate(upper(col), '1234567890', 'abcdefghij')
我有一个查询 return 我想作为排序依据的字符串列。 当我按 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+'))
请协助。
您可以使用 regexp_like()
。对于升序排序:
order by (case when regexp_like(col, '^[0-9]+$') then 1 else 2 end) asc,
col asc
您可以像这样尝试不同的方法:
order by translate(upper(col), '1234567890', 'abcdefghij')