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 排序和连字符的主要内容,如果未能解决你的问题,请参考以下文章

SQL 字符串按大小排序

sql排序,id本身为字符串,怎样转换为数字后排序

sql排序,id本身为字符串,怎样转换为数字后排序

sql数字字符串排序

SQL2000里面字符串排序

SQL 字符串排序问题