一尘不染

如何首先使用Oracle SQL查询按数字排序?

sql

我有一个带有“标题”字段的表,该字段是varchar2,我想选择所有行,然后按通常的顺序先按数字然后按字母对它们进行排序。

例如,我目前ORDER BY title最后使用一个简单的代码:

  • 美国广播公司
  • 国防部
  • 321

但是我想要这个:

  • 321
  • 美国广播公司
  • 国防部

奇怪的是,SQL Developer显示“正确”的顺序,以数字开头。但是在我的应用程序(使用OCI8的PHP)上,它最后显示数字。


阅读 142

收藏
2021-03-10

共1个答案

一尘不染

不是Oracle专家,但您应该能够做到这一点而无需更改会话

SELECT * FROM my_data SORT by NLSSORT(title,鈥橬LS_SORT=BINARY_AI鈥�)

您可以在其中更改NLS_SORT=以适合您的需求(这是列表)

请记住,文档说这将强制进行表扫描,因此首先过滤它们可能会有所帮助(但是如果您选择所有表扫描,无论如何您将要使用它们)。

SQL Developer表现出不同行为的原因可能是因为它更改了会话。

2021-03-10