在使用二进制排序规则的 Oracle SQL 查询中,数字排在字母之前。但如果查询使用特定于语言的排序规则来启用语言排序,则数字将排序在字母之后。
示例:https://dbfiddle.uk/BBfvb2lh
这不同于例如.NET 排序,即使使用语言排序,数字也会排在字母之前。
示例:https://dotnetfiddle.net/65G3na
如何在 Oracle SQL 查询中使用语言排序 和 在字母之前对数字进行排序?
假设您可以先接受排序数字,然后再接受其他所有内容,那么您可以使用以下逻辑:
SELECT val
FROM yourTable
ORDER BY
CASE WHEN REGEXP_LIKE(val, '^[0-9]') THEN 1 ELSE 2 END, -- numbers first
val; -- then sort by val