Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Двоичник Member Откуда: Бобруйск Сообщений: 328 |
declare @a1 varchar(50) = 'adasdsadasd ' declare @a2 varchar(50) = 'adasdsadasd' if @a1 = @a2 select 'true' else select 'false' в результате получаю true что за ерунда? select @@version
|
||||
24 июн 15, 15:52 [17811934] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
Двоичник, хвостовые пробелы не учитываются при сравнении. By design! Исключение - шаблон для LIKE. Там все пробелы учитываются. ЕМНИП (проверьте самостоятельно) |
24 июн 15, 15:59 [17811963] Ответить | Цитировать Сообщить модератору |
Oleksii Kovalov Member Откуда: Сообщений: 100 |
INF: How SQL Server Compares Strings with Trailing Spaces https://support.microsoft.com/en-us/kb/316626 |
24 июн 15, 16:30 [17812116] Ответить | Цитировать Сообщить модератору |
Сон Веры Павловны Member Откуда: Сообщений: 6126 |
Не учитывается, если паттерн неюникодный, и строка, к которой применяется паттерн, тоже неюникодная, и при этом хвостовые пробелы в последней: select case when '1 ' like '1' then 1 else 0 end, case when N'1 ' like N'1' then 1 else 0 end, case when N'1 ' like '1' then 1 else 0 end, case when '1 ' like N'1' then 1 else 0 end, -- case when '1' like '1 ' then 1 else 0 end, case when N'1' like N'1 ' then 1 else 0 end, case when N'1' like '1 ' then 1 else 0 end, case when '1' like N'1 ' then 1 else 0 end - первый кейс даст 1, остальные 0. Проверялось на 2014 сервере, коллэйшн базы Cyrillic_General_CI_AS (хотя он тут вроде как роли не играет). |
||
24 июн 15, 17:34 [17812431] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
Сон Веры Павловны, а это разве не означает, что хвостовые пробелы левого операнда LIKE не учитываются, а правого - учитываются, как я и написал? |
24 июн 15, 17:38 [17812445] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
Я бы varbinary сравнивал. Символьное сравнение несимметрично ЕМНИП. |
24 июн 15, 18:01 [17812532] Ответить | Цитировать Сообщить модератору |
Сон Веры Павловны Member Откуда: Сообщений: 6126 |
Ну как же - в случае юникодного левого операнда хвостовые пробелы тоже учитываются - все операнды ковертятся к юникоду, а при сравнении по юникодным правилам хвостовые пробелы учитываются всегда. |
||
24 июн 15, 18:08 [17812557] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |