SQL排序和连字符

时间:2008-12-11 21:12:09

标签: sql-server-2005 sorting hyphen

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

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

1 个答案:

答案 0 :(得分:18)

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

我认为区别在于“字符串排序”与“字排序”之间(忽略连字符)

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字符串'a-c'小于   字符串'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