SQL 排序和连字符
Posted
技术标签:
【中文标题】SQL 排序和连字符【英文标题】:SQL Sorting and hyphens 【发布时间】:2010-09-26 12:47:33 【问题描述】:有没有一种方法可以在 SQL Server 2005 中轻松排序,同时忽略字符串字段中的连字符?目前我必须做一个 REPLACE(fieldname,'-','') 或一个函数来删除排序子句中的连字符。我希望可以在存储过程的顶部设置一个标志或其他东西。
Access 和 GridView 默认排序似乎忽略了字符串中的连字符。
【问题讨论】:
【参考方案1】:我学到了一些新东西,就像你一样
我认为区别在于“字符串排序”与“单词排序”(忽略连字符)
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
【讨论】:
以上是关于SQL 排序和连字符的主要内容,如果未能解决你的问题,请参考以下文章