Включите SQL Server для определения расстояния между - (U + 002D) и - (U + FF0D) - PullRequest
0 голосов
/ 11 декабря 2019

Если SQL Server настроен так, чтобы считать - (U + 002D) и - (U + FF0D) одним и тем же, то есть

SELECT 
    CASE WHEN 'AB-CD' = 'AB-CD' 
       THEN 'SAME' 
       ELSE 'DIFFERENT' 
    END

приведет к «ТО ЖЕ», есть ли способчтобы он различал эти (и вообще все) символы, т. е. выдает «РАЗНОЕ»?

Я не могу изменить настройки всей среды.

Я знаю, что есть вариантсделать одно конкретное сравнение SQL чувствительным к регистру, даже если общая настройка нечувствительна к регистру, указав

SELECT 
    CASE WHEN 'A' = 'a' COLLATE SQL_Latin1_General_CP1_CS_AS 
       THEN 'SAME' 
       ELSE 'DIFFERENT' 
    END

Есть ли подобный "прием", чтобы сделать SQL "чувствительным" для различных специальных символов?

1 Ответ

0 голосов
/ 11 декабря 2019

Ответ большой N за Unicode NVARCHAR с базой данных, настроенной на сопоставление с чувствительностью Accent, как Persian_100_CI_AS:

SELECT 
    CASE WHEN N'AB-CD' = N'AB-CD' 
        THEN 'SAME' 
        ELSE 'DIFFERENT' 
    END

Или вы можете установить Collate во время выполнения:

SELECT 
    CASE WHEN N'AB-CD' COLLATE Persian_100_CI_AS = N'AB-CD'  COLLATE Persian_100_CI_AS
        THEN 'SAME' 
        ELSE 'DIFFERENT' 
    END
...