有没有一种方法可以轻松地排序在SQL Server 2005,而忽略了一个字符串字段连字符? 目前,我必须做一个REPLACE(字段名,“ - ”,“”)或函数删除排序子句中的连字符。 我一直希望有一个标志,我可以设置在存储过程或东西的顶部。
Access和GridView控件的默认排序似乎忽略在字符串中使用连字符。
有没有一种方法可以轻松地排序在SQL Server 2005,而忽略了一个字符串字段连字符? 目前,我必须做一个REPLACE(字段名,“ - ”,“”)或函数删除排序子句中的连字符。 我一直希望有一个标志,我可以设置在存储过程或东西的顶部。
Access和GridView控件的默认排序似乎忽略在字符串中使用连字符。
我学到新的东西,就像你也
我相信,不同的是“ 字符串排序 ”之间VS一“ 字排序 ”(忽略连字符)
WORD排序和字符串之间的区别样品排序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字符串“交流”小于字符串“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