Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Оператор LIKE по шаблону не срабатывает на символ номера (N с кружочком) / 16 сообщений из 16, страница 1 из 1
26.03.2018, 13:18
    #39620481
RuCosinus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оператор LIKE по шаблону не срабатывает на символ номера (N с кружочком)
Добрый день.

В коде есть проверка на соответствие символов в строке некоему подмножеству символов. Недавно заметил, что он не отрабатывает на символе номера №, как нужно (то есть, видимо, отрабатывает верно, просто я чего-то не понимаю).

Упрощенный код:

Код: sql
1.
2.
if UPPER('№') like '%[^/?:().,''+ A-Z0-9-]%'
	select 'ERR'



Никак не пойму, почему он считает, что символ № попадает в указанный диапазон.
Подскажите, где может быть зарыта собака. Может что-то с кодировками где-то что-то указать нужно строго? Все остальные символы отрабатывают адекватно моему ожиданию.
...
Рейтинг: 0 / 0
26.03.2018, 13:23
    #39620486
Гигабайт Мегабайтович Килобайтов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оператор LIKE по шаблону не срабатывает на символ номера (N с кружочком)
а у меня всё штатно работает )) ?
...
Рейтинг: 0 / 0
26.03.2018, 13:36
    #39620496
RuCosinus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оператор LIKE по шаблону не срабатывает на символ номера (N с кружочком)
Гигабайт Мегабайтович Килобайтова у меня всё штатно работает )) ?
Вооот... Тоже какой-никакой результат. Значит что-то "в консерватории" править нужно. Но что?
...
Рейтинг: 0 / 0
26.03.2018, 13:36
    #39620497
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оператор LIKE по шаблону не срабатывает на символ номера (N с кружочком)
Информация для размышления:
Код: sql
1.
2.
3.
4.
5.
if UPPER('№') like '%[^/?:().,''+ A-Z0-9-]%' collate Cyrillic_General_Bin
	select 'ERR'

if UPPER('№') like '%[^/?:().,''+ A-Z0-9-]%' collate Cyrillic_General_CI_AS
	select 'ERR'
...
Рейтинг: 0 / 0
26.03.2018, 13:55
    #39620507
KRS544
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оператор LIKE по шаблону не срабатывает на символ номера (N с кружочком)
Еще
Код: sql
1.
2.
3.
4.
if UPPER('№') like '%[^/?:().,''+ A-Z0-9-]%' collate Cyrillic_General_CI_AS
	select 'ERR'
if UPPER('№') like '%[/^?:().,''+ A-Z0-9-]%' collate Cyrillic_General_CI_AS
	select 'ERR'
...
Рейтинг: 0 / 0
26.03.2018, 13:55
    #39620508
Гигабайт Мегабайтович Килобайтов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оператор LIKE по шаблону не срабатывает на символ номера (N с кружочком)
Гавриленко Сергей Алексеевич,

ну вот . а только я хотел пообщаться с товарищем ))
...
Рейтинг: 0 / 0
26.03.2018, 13:57
    #39620512
KRS544
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оператор LIKE по шаблону не срабатывает на символ номера (N с кружочком)
Или даже так :)
Код: sql
1.
2.
3.
4.
5.
if UPPER('0') like '%[^/?:().,''+ A-Z0-9-]%' 
	select 'ERR'

if UPPER('0') like '%[/^?:().,''+ A-Z0-9-]%' 
	select 'ERR'



Все дело в ^
...
Рейтинг: 0 / 0
26.03.2018, 14:00
    #39620515
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оператор LIKE по шаблону не срабатывает на символ номера (N с кружочком)
KRS544Или даже так :)
Код: sql
1.
2.
3.
4.
5.
if UPPER('0') like '%[^/?:().,''+ A-Z0-9-]%' 
	select 'ERR'

if UPPER('0') like '%[/^?:().,''+ A-Z0-9-]%' 
	select 'ERR'



Все дело в ^
тут всё дело в вашей голове. А умные люди говорят смотреть на collate
...
Рейтинг: 0 / 0
26.03.2018, 14:17
    #39620522
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оператор LIKE по шаблону не срабатывает на символ номера (N с кружочком)
Гораздо правильнее вообще не пользоваться диапазонами.
Все беды от них. Разве так сложно просто написать все символы явно?
И COLLATE тогда будет неважен.

От A до Z - всего 26 символов, от 0 до 9 - всего 10. Эх, лень-матушка...
...
Рейтинг: 0 / 0
26.03.2018, 15:57
    #39620585
KRS544
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оператор LIKE по шаблону не срабатывает на символ номера (N с кружочком)
мммда
Код: sql
1.
2.
if '№' collate Latin1_General_CI_AS = '?' collate Latin1_General_CI_AS select 'ERR2'
select  ASCII('№' collate Latin1_General_CI_AS) , ASCII('?' collate Latin1_General_CI_AS)


прям открыли глаза...
...
Рейтинг: 0 / 0
26.03.2018, 16:05
    #39620590
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оператор LIKE по шаблону не срабатывает на символ номера (N с кружочком)
KRS544мммда
Код: sql
1.
2.
if '№' collate Latin1_General_CI_AS = '?' collate Latin1_General_CI_AS select 'ERR2'
select  ASCII('№' collate Latin1_General_CI_AS) , ASCII('?' collate Latin1_General_CI_AS)


прям открыли глаза...
дык нету шапочки
http://collation-charts.org/mssql/mssql.0409.1252.Latin1_General_CI_AI.html
...
Рейтинг: 0 / 0
26.03.2018, 16:10
    #39620595
KRS544
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оператор LIKE по шаблону не срабатывает на символ номера (N с кружочком)
TaPaK, да понятно, нет в латинской кодировке №, это символ в ? преобразуется
...
Рейтинг: 0 / 0
26.03.2018, 16:29
    #39620602
RuCosinus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оператор LIKE по шаблону не срабатывает на символ номера (N с кружочком)
Всем спасибо.

Хоть мои предположения относительно кодировки оказались не совсем впрямую влияющими, но тем не менее я был близок. Собака порылась в collation.
Спасибо всем за популярное разъяснение.
...
Рейтинг: 0 / 0
26.03.2018, 16:51
    #39620614
нуб987
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оператор LIKE по шаблону не срабатывает на символ номера (N с кружочком)
iapГораздо правильнее вообще не пользоваться диапазонами.
Все беды от них. Разве так сложно просто написать все символы явно?
И COLLATE тогда будет неважен.

От A до Z - всего 26 символов, от 0 до 9 - всего 10. Эх, лень-матушка...
если это сарказм и ирония, то дальше мой комментарий можете не читать

но если вы это на полном серьезе...
если есть возможность использовать диапазон, почему бы этим не пользоваться? Чего плохого в сокращении кода? А то сейчас скатимся до машинных кодов.
Если я напишу вот так:
абвгдежзийклмнопрстуфхцчшщъыьэюя

или так
абвгдежзийкчмнопрстуфхцлшщъыьэюя

вы сможете сходу определить, какие буквы поменяны местами или какой не хватает?
А если такого кода не на одну страничку, а несколько мегабайт и вы дополняете/правите чужой код?
...
Рейтинг: 0 / 0
26.03.2018, 16:55
    #39620617
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оператор LIKE по шаблону не срабатывает на символ номера (N с кружочком)
нуб987,

Порядок не имеет значение.
Если бы ТС сразу указал все что он хочет отфильтровать, то и темы бы не было.
Если вы беконечно лайкаете, то что-то с архитектурой у вас сильно не так
...
Рейтинг: 0 / 0
26.03.2018, 18:13
    #39620685
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оператор LIKE по шаблону не срабатывает на символ номера (N с кружочком)
нуб987если есть возможность использовать диапазон, почему бы этим не пользоваться? Чего плохого в сокращении кода?Плохо, что такая запись зависит от COLLATE.
А без диапазонов имеет однозначный смысл.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Оператор LIKE по шаблону не срабатывает на символ номера (N с кружочком) / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]