Сортировка SQL и дефисы - PullRequest
       29

Сортировка SQL и дефисы

7 голосов
/ 12 декабря 2008

Есть ли способ легко сортировать в SQL Server 2005, игнорируя дефисы в строковом поле? В настоящее время я должен сделать REPLACE (fieldname, '-', '') или функцию для удаления дефиса в предложении sort. Я надеялся, что есть флаг, который я могу установить в верхней части хранимой процедуры или что-то в этом роде.

Access и сортировка по умолчанию в GridView игнорируют перенос в строках.

1 Ответ

18 голосов
/ 12 декабря 2008

Я узнал что-то новое, так же, как и вы

Я считаю, что разница между " Сортировка строк " и " Сортировка слов " (игнорирует дефис)

Пример разницы между сортировкой 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 строка 'a-c' меньше чем строка «ab», потому что дефис ("-") сортируется как отдельный символ, который предшествует "б". Однако, если вы конвертируете эти строки 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
...