【问题标题】:SQL Server equivalent to Oracle's NLSSORT function?SQL Server 相当于 Oracle 的 NLSSORT 函数?
【发布时间】:2023-02-23 02:55:20
【问题描述】:

我正在尝试转换在其 order by 子句中使用特定于数据库的函数 NLSSORT 的 Oracle 查询。

order by NLSSORT(col, 'NLS_SORT=GENERIC_M')

我想在 SQL Server (2008) 中执行相同的功能。我无法找到执行此操作的等效逻辑。

【问题讨论】:

  • 等价物可能像ORDER BY col 一样简单。默认情况下,SQL Server 根据列的排序规则执行排序,这已经等同于 GENERIC_M 之类的东西,除非您已明确将其设置为二进制排序规则。您可能需要仔细看看为什么这里有一个明确的 NLSSORT,例如,为什么默认的 ORDER BY 在 Oracle 端没有产生令人满意的结果。
  • 您最好解释该函数的作用,而不是依赖同时了解它和 SQL Server 的人。

标签: sql sql-server


【解决方案1】:

等价物可能像ORDER BY col 一样简单。默认情况下,SQL Server 根据列的排序规则执行排序,这已经等同于 GENERIC_M 之类的东西,除非您已明确将其设置为二进制排序规则。您可能需要仔细看看为什么这里有一个明确的 NLSSORT,例如,为什么默认的 ORDER BY 在 Oracle 端没有产生令人满意的结果。

如果您需要按列的排序规则以外的排序规则排序,请使用COLLATE,例如

CREATE TABLE Locations
(Place varchar(15) NOT NULL);
GO
INSERT Locations(Place) VALUES ('Chiapas'),('Colima')
                             , ('Cinco Rios'), ('California');
GO
--Apply an typical collation
SELECT Place FROM Locations
ORDER BY Place
COLLATE Latin1_General_CS_AS_KS_WS ASC;
GO
-- Apply a Spanish collation
SELECT Place FROM Locations
ORDER BY Place
COLLATE Traditional_Spanish_ci_ai ASC;
GO

【讨论】:

    猜你喜欢
    • 2011-01-07
    • 2010-12-30
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多