Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
RuCosinus Member Откуда: Сообщений: 55 |
Добрый день. В коде есть проверка на соответствие символов в строке некоему подмножеству символов. Недавно заметил, что он не отрабатывает на символе номера №, как нужно (то есть, видимо, отрабатывает верно, просто я чего-то не понимаю). Упрощенный код: if UPPER('№') like '%[^/?:().,''+ A-Z0-9-]%' select 'ERR' Никак не пойму, почему он считает, что символ № попадает в указанный диапазон. Подскажите, где может быть зарыта собака. Может что-то с кодировками где-то что-то указать нужно строго? Все остальные символы отрабатывают адекватно моему ожиданию. |
26 мар 18, 13:18 [21286097] Ответить | Цитировать Сообщить модератору |
Гигабайт Мегабайтович Килобайтов Member [заблокирован] Откуда: Сообщений: 5975 |
а у меня всё штатно работает )) ? |
26 мар 18, 13:23 [21286122] Ответить | Цитировать Сообщить модератору |
RuCosinus Member Откуда: Сообщений: 55 |
Вооот... Тоже какой-никакой результат. Значит что-то "в консерватории" править нужно. Но что? |
||
26 мар 18, 13:36 [21286175] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37138 |
Информация для размышления: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' |
26 мар 18, 13:36 [21286177] Ответить | Цитировать Сообщить модератору |
KRS544 Member Откуда: Сообщений: 497 |
Еще 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' |
26 мар 18, 13:55 [21286244] Ответить | Цитировать Сообщить модератору |
Гигабайт Мегабайтович Килобайтов Member [заблокирован] Откуда: Сообщений: 5975 |
Гавриленко Сергей Алексеевич, ну вот . а только я хотел пообщаться с товарищем )) |
26 мар 18, 13:55 [21286247] Ответить | Цитировать Сообщить модератору |
KRS544 Member Откуда: Сообщений: 497 |
Или даже так :)if UPPER('0') like '%[^/?:().,''+ A-Z0-9-]%' select 'ERR' if UPPER('0') like '%[/^?:().,''+ A-Z0-9-]%' select 'ERR' Все дело в ^ |
26 мар 18, 13:57 [21286257] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
тут всё дело в вашей голове. А умные люди говорят смотреть на collate |
||
26 мар 18, 14:00 [21286268] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
Гораздо правильнее вообще не пользоваться диапазонами. Все беды от них. Разве так сложно просто написать все символы явно? И COLLATE тогда будет неважен. От A до Z - всего 26 символов, от 0 до 9 - всего 10. Эх, лень-матушка... |
26 мар 18, 14:17 [21286340] Ответить | Цитировать Сообщить модератору |
KRS544 Member Откуда: Сообщений: 497 |
мммда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) прям открыли глаза... |
26 мар 18, 15:57 [21286747] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
дык нету шапочки http://collation-charts.org/mssql/mssql.0409.1252.Latin1_General_CI_AI.html |
||
26 мар 18, 16:05 [21286800] Ответить | Цитировать Сообщить модератору |
KRS544 Member Откуда: Сообщений: 497 |
TaPaK, да понятно, нет в латинской кодировке №, это символ в ? преобразуется |
26 мар 18, 16:10 [21286839] Ответить | Цитировать Сообщить модератору |
RuCosinus Member Откуда: Сообщений: 55 |
Всем спасибо. Хоть мои предположения относительно кодировки оказались не совсем впрямую влияющими, но тем не менее я был близок. Собака порылась в collation. Спасибо всем за популярное разъяснение. |
26 мар 18, 16:29 [21286962] Ответить | Цитировать Сообщить модератору |
нуб987 Member Откуда: Сообщений: 50 |
если это сарказм и ирония, то дальше мой комментарий можете не читать но если вы это на полном серьезе... если есть возможность использовать диапазон, почему бы этим не пользоваться? Чего плохого в сокращении кода? А то сейчас скатимся до машинных кодов. Если я напишу вот так: абвгдежзийклмнопрстуфхцчшщъыьэюя или так абвгдежзийкчмнопрстуфхцлшщъыьэюя вы сможете сходу определить, какие буквы поменяны местами или какой не хватает? А если такого кода не на одну страничку, а несколько мегабайт и вы дополняете/правите чужой код? |
||
26 мар 18, 16:51 [21287090] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
нуб987, Порядок не имеет значение. Если бы ТС сразу указал все что он хочет отфильтровать, то и темы бы не было. Если вы беконечно лайкаете, то что-то с архитектурой у вас сильно не так |
26 мар 18, 16:55 [21287108] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
А без диапазонов имеет однозначный смысл. |
||
26 мар 18, 18:13 [21287444] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |