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

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

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

11.12.2008 21:12:09
1 ОТВЕТ
РЕШЕНИЕ

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

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

Пример различий между сортировкой 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
18
11.12.2008 21:37:21