Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 почему отрабатывает like?  [new]
,,,^..^,,,
Guest
Добрый день.

Есть запрос вида:

select 1
where '№1234' like '[a-z]%'

У меня запрос возвращает 1.
Почему отрабатывает like, если первый символ не буква?
16 апр 15, 11:21    [17522330]     Ответить | Цитировать Сообщить модератору
 Re: почему отрабатывает like?  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
,,,^..^,,,
Добрый день.

Есть запрос вида:

select 1
where '№1234' like '[a-z]%'

У меня запрос возвращает 1.
Почему отрабатывает like, если первый символ не буква?
А COLLATE какой?
Вот именно поэтому я и избегаю применять диапазоны.
Лучше просто написать все символы в явном виде.
Или на худой конец преобразовать к бинарному коллэйшену.
16 апр 15, 11:23    [17522358]     Ответить | Цитировать Сообщить модератору
 Re: почему отрабатывает like?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
,,,^..^,,,
Добрый день.

Есть запрос вида:

select 1
where '№1234' like '[a-z]%'

У меня запрос возвращает 1.
Почему отрабатывает like, если первый символ не буква?


у меня не возвращает 1
16 апр 15, 11:26    [17522390]     Ответить | Цитировать Сообщить модератору
 Re: почему отрабатывает like?  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
,,,^..^,,,,

посмотрите, что вернёт
SELECT CHAR(number) FROM master.dbo.spt_values WHERE type='P' AND number BETWEEN 32 AND 250 ORDER BY CHAR(number);
Символ № находится между a и z или нет?
16 апр 15, 11:27    [17522398]     Ответить | Цитировать Сообщить модератору
 Re: почему отрабатывает like?  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
А так?
SELECT CHAR(number) COLLATE Cyrillic_General_BIN FROM master.dbo.spt_values WHERE type='P' AND number BETWEEN 32 AND 250 ORDER BY 1;
16 апр 15, 11:28    [17522413]     Ответить | Цитировать Сообщить модератору
 Re: почему отрабатывает like?  [new]
o-o
Guest


К сообщению приложен файл. Размер - 46Kb
16 апр 15, 11:29    [17522422]     Ответить | Цитировать Сообщить модератору
 Re: почему отрабатывает like?  [new]
Gviber
Member

Откуда:
Сообщений: 124
На разных COLLATE работает, даже на unicode.

select 1 where N'№' like N'[a-z]' --true
16 апр 15, 11:33    [17522467]     Ответить | Цитировать Сообщить модератору
 Re: почему отрабатывает like?  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Gviber
На разных COLLATE работает, даже на unicode.

select 1 where N'№' like N'[a-z]' --true
Unicode и collation - это разные вещи.
SELECT 1 WHERE '№1234'COLLATE Cyrillic_General_CI_AI LIKE '[a-z]%'
16 апр 15, 11:43    [17522565]     Ответить | Цитировать Сообщить модератору
 Re: почему отрабатывает like?  [new]
,,,^..^,,,
Guest
заработало вот так:
select 1
where 'a1' like '[a-z]1' COLLATE Cyrillic_General_BIN
16 апр 15, 11:46    [17522590]     Ответить | Цитировать Сообщить модератору
 Re: почему отрабатывает like?  [new]
o-o
Guest
iap
Gviber
На разных COLLATE работает, даже на unicode.
select 1 where N'№' like N'[a-z]' --true
Unicode и collation - это разные вещи.
SELECT 1 WHERE '№1234'COLLATE Cyrillic_General_CI_AI LIKE '[a-z]%'

Unicode и collation - это разные вещи -- YES

SELECT 1 WHERE '№1234'COLLATE Cyrillic_General_CI_AI LIKE '[a-z]%'

и что?
в базе с латинским коллэйшеном надо передавать юникодом, или же номер станет вопросиком еще до.

К сообщению приложен файл. Размер - 56Kb
16 апр 15, 11:58    [17522700]     Ответить | Цитировать Сообщить модератору
 Re: почему отрабатывает like?  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
,,,^..^,,,
заработало вот так:
select 1
where 'a1' like '[a-z]1' COLLATE Cyrillic_General_BIN
Мне больше по душе так
SELECT 1 WHERE '№1234' LIKE '[abcdefghijklmnjhqrstuvwxez]%'
16 апр 15, 12:09    [17522824]     Ответить | Цитировать Сообщить модератору
 Re: почему отрабатывает like?  [new]
Gviber
Member

Откуда:
Сообщений: 124
Взял 3376 COLLATE из них без unicode ('№' like '[a-z]') воспроизводится в 452 случаях, с юникод воспроизводится (N'№' like N'[a-z]') в 3143

Получается N'№' входит в N'[a-z]' в 3143 из 3376 COLLATE (т.е. практически во всех). 233 в которых не воспроизводится заканчиваются в основном на _BIN или _BIN2

Один из тех в которых не воспроизводится:
select 'Albanian_BIN' where N'№' like N'[a-z]' COLLATE Albanian_BIN
16 апр 15, 12:19    [17522957]     Ответить | Цитировать Сообщить модератору
 Re: почему отрабатывает like?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Gviber
Взял 3376 COLLATE из них без unicode ('№' like '[a-z]') воспроизводится в 452 случаях, с юникод воспроизводится (N'№' like N'[a-z]') в 3143

Получается N'№' входит в N'[a-z]' в 3143 из 3376 COLLATE (т.е. практически во всех). 233 в которых не воспроизводится заканчиваются в основном на _BIN или _BIN2

Один из тех в которых не воспроизводится:
select 'Albanian_BIN' where N'№' like N'[a-z]' COLLATE Albanian_BIN


а кстати, мне всегда олбанский казался языком будущего!
16 апр 15, 12:26    [17523012]     Ответить | Цитировать Сообщить модератору
 Re: почему отрабатывает like?  [new]
Gviber
Member

Откуда:
Сообщений: 124
Это я первый взял =)

Там и такие входят:
Cyrillic_General_BIN
Cyrillic_General_BIN2
Cyrillic_General_100_BIN
Cyrillic_General_100_BIN2

SQL_Latin1_General_CP437_BIN
SQL_Latin1_General_CP437_BIN2
SQL_Latin1_General_CP850_BIN
SQL_Latin1_General_CP850_BIN2

Latin1_General_BIN
Latin1_General_BIN2
Latin1_General_100_BIN
Latin1_General_100_BIN2
16 апр 15, 12:31    [17523070]     Ответить | Цитировать Сообщить модератору
 Re: почему отрабатывает like?  [new]
o-o
Guest
Gviber
Это я первый взял =)
Там и такие входят:
...

...но мы все равно запатентуем Olbanian_BIN.
а видели, как мою попытку перевести на него форум пресекли на корню?
врагам явно не по вкусу, это хороший признак
16 апр 15, 12:35    [17523110]     Ответить | Цитировать Сообщить модератору
 Re: почему отрабатывает like?  [new]
Gviber
Member

Откуда:
Сообщений: 124
select 1 where '№' like '[n-o]' --true

Т.е. по их мнению это вторая запись N

Посмотрел сколько еще таких символов входят в a-z, оказалось всего 2:
1. ™
2. №
16 апр 15, 13:04    [17523391]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить