有没有办法在SQL Server 2005中轻松排序而忽略字符串字段中的连字符?目前我必须执行REPLACE(fieldname,' - ','')或函数来删除sort子句中的连字符.我希望有一个标志,我可以设置在存储过程的顶部或其他东西.
Access和GridView默认排序似乎忽略了字符串中的泛滥.
我也学到了一些新东西,就像你一样
我相信区别在于" 字符串排序 "与" 字排序 "之间(忽略连字符)
WORD排序和STRING排序之间的示例差异 http://andrusdevelopment.blogspot.com/2007/10/string-sort-vs-word-sort-in-net.html
来自Microsoft 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