8

有没有一种方法可以在 SQL Server 2005 中轻松排序,同时忽略字符串字段中的连字符?目前我必须做一个 REPLACE(fieldname,'-','') 或一个函数来删除排序子句中的连字符。我希望可以在存储过程的顶部设置一个标志或其他东西。

Access 和 GridView 默认排序似乎忽略了字符串中的连字符。

4

1 回答 1

19

我学到了一些新东西,就像你一样

我相信区别在于“字符串排序”与“单词排序”(忽略连字符)

WORD 排序和 STRING 排序之间的示例区别 http://andrusdevelopment.blogspot.com/2007/10/string-sort-vs-word-sort-in-net.html

来自微软 http://support.microsoft.com/kb/322112

例如,如果您使用 SQL 排序规则“SQL_Latin1_General_CP1_CI_AS”,则非 Unicode 字符串“ac”小于字符串“ab”,因为连字符 (“-”) 被排序为位于“b”之前的单独字符. 但是,如果将这些字符串转换为 Unicode 并执行相同的比较,则认为 Unicode 字符串 N'a-c' 大于 N'ab',因为 Unicode 排序规则使用忽略连字符的“单词排序” .

我做了一些示例代码,您也可以使用 COLLATE 来找到适合您排序的代码

DECLARE @test TABLE
(string VARCHAR(50))

INSERT INTO @test SELECT 'co-op'
INSERT INTO @test SELECT 'co op'
INSERT INTO @test SELECT 'co_op'

SELECT * FROM @test ORDER BY string --COLLATE SQL_Latin1_General_Cp1_CI_AS
--co op
--co-op
--co_op

SELECT * FROM @test ORDER BY CAST(string AS NVARCHAR(50)) --COLLATE SQL_Latin1_General_Cp1_CI_AS
--co op
--co_op
--co-op
于 2008-12-11T21:37:21.393 回答