Oracle 数据库默认使用二进制排序来对存储的数据进行排序,这在某些情况下可能与我们希望看到的排序结果有出入。
二进制排序
二进制排序将字符串存储为一系列字节值,并逐个字节进行比较。在二进制排序中,数字比字母优先,而大写字母比小写字母优先。例如,"10" 将排在 "A" 之前,"A" 将排在 "a" 之前。这种排序规则对于数字和字母组合的字符串尤其不合理。
解决
为了解决二进制排序的局限性,Oracle 提供了以下选项:
使用 ORDER BY 语句显式指定排序顺序:
例如:ORDER BY name ASC
或 ORDER BY name DESC
使用 NLS_SORT 参数:
NLS_SORT 参数允许您指定要用于排序的语言和特定规则。例如:SET NLS_SORT = GERMAN
使用 COLLATE 子句:
COLLATE 子句允许您指定特定排序规则来排序特定列或表达式。例如:ORDER BY name COLLATE "C"
其他规则
除了二进制排序之外,Oracle 默认 SQL 排序规则还包括:
NULL 值按升序排序。
空字符串按升序排序。
大小写敏感。
小贴士
如果您发现 Oracle 的默认 SQL 排序规则不符合您的要求,请考虑使用上面介绍的 来自定义排序行为。通过理解和正确使用这些规则,您可以确保您的查询返回预期结果。