Почему две строки могут сравниваться как равные? - PullRequest
1 голос
/ 25 апреля 2020

Я работаю над сравнением строк с = и LIKE, и я нашел это в документации :

В зависимости от последовательности упорядочения, две строки могут сравниваться как равные, даже если они имеют разную длину или содержат разные последовательности символов. Когда операции MAX, MIN, DISTINCT, ссылки на столбец группировки и операторы UNION, EXCEPT и INTERSECT ссылаются на строки символов, конкретное значение c, выбранное этими операциями из набора таких равных значений, зависит от реализации .

Ответы [ 2 ]

7 голосов
/ 25 апреля 2020

Вы просите конкретный пример? На немецком языке у нас есть строчная буква ß (длина 1). В верхнем регистре это письмо обычно пишется как SS (длина 2). Таким образом, при использовании западноевропейского сопоставления без учета регистра следующий SQL

SELECT CASE WHEN 'ß' = 'SS' THEN 'Yes' ELSE 'No' END

будет выводить Yes, даже если строки имеют разную длину.

2 голосов
/ 25 апреля 2020

Параметры сортировки могут быть чувствительными к различным вещам. В настоящее время существуют Case, Accent, Kana, Width и дополнительные характеристики чувствительности. Существуют также двоичные параметры сортировки.

Так что для параметров сортировки, которые нечувствительны к регистру и акценту, строки N'ABCDEFG' и N'äbçdéfg' будут рассматриваться как "одинаковые" строки, несмотря на то, что они не разделяют одинаковые буквенные символы.

Смайлики - это еще одна область, где совершенно разные символы могут рассматриваться как одинаковые. Например, приведенное ниже возвращает 1, несмотря на то, что одна строка содержит смайлики кошки и дракона, а другая - торта:

SELECT CASE WHEN N'??' COLLATE SQL_Latin1_General_CP1_CI_AS = N'?' COLLATE SQL_Latin1_General_CP1_CI_AS  THEN 1 END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...