Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
tunknown Member Откуда: Сообщений: 766 |
SQL x64 2014 12.0.5000.0select patindex('%[^0-9a-z]%','123№123' collate Cyrillic_General_CI_AS)--0 ,patindex('%[^0-9a-z]%','123№123' collate Latin1_General_CI_AS) --4 Это ошибка, что символ не попадает под шаблон или верное поведение? Где-нибудь детальная документация по локалям есть? |
28 июн 19, 17:14 [21917227] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11561 |
такой байдизайн, уже очень давно https://www.sql.ru/forum/939241/proverka-na-simvoly-v-ms-sql |
28 июн 19, 17:24 [21917236] Ответить | Цитировать Сообщить модератору |
tunknown Member Откуда: Сообщений: 766 |
Благодарю. Видимо, придётся упоминать Cyrillic_General_BIN:select patindex('%[^0-9a-z]%','123№123' collate Cyrillic_General_BIN) --4 |
28 июн 19, 17:29 [21917238] Ответить | Цитировать Сообщить модератору |
Shakill Member Откуда: мск Сообщений: 1881 |
если проблема локализована, то правила сравнения можно поковырять, конечно, чтобы увидеть в каком диапазоне символ находится. но готовых символьных таблиц по коллейшенам не видел select s.c, order_cyr = row_number() over (order by s.c collate Cyrillic_General_CI_AS), order_lat = row_number() over (order by s.c collate Latin1_General_CI_AS), order_bin = row_number() over (order by s.c collate Cyrillic_General_BIN) from (values ('1'), ('0'), ('9'), ('№'), ('m'), ('n'), ('o')) as s(c) |
||
28 июн 19, 17:40 [21917244] Ответить | Цитировать Сообщить модератору |
Yuri Abele Member Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe Сообщений: 1661 |
Поставьте перед ВСЕМИ открывающими апострофами латинскую N (N'мой UNICODE текст') и будет счастие! |
1 июл 19, 17:08 [21918374] Ответить | Цитировать Сообщить модератору |
tunknown Member Откуда: Сообщений: 766 |
select patindex(N'%[^0-9a-z]%',N'123№123' collate Cyrillic_General_CI_AS)--0 ,patindex(N'%[^0-9a-z]%',N'123№123' collate Latin1_General_CI_AS)--0 |
||
2 июл 19, 09:17 [21918709] Ответить | Цитировать Сообщить модератору |
Yuri Abele Member Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe Сообщений: 1661 |
А если скрипты сохранять как UTF-8 файлы, и убрать нафиг этот collate вообще? Последние года так работаем и всегда хватало. |
||||
2 июл 19, 09:49 [21918726] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31778 |
Тут же проблема не только в корректной передачи символов (само собой, что их нужно передавать правильно), а в весе символов, то есть в том, попадает символ "№" в диапазон a-z, или не попадает (и при каких условиях). Для гарантии нужно писать не '%[^0-9a-z]%', а '%[^01233456789qwertyuioplkjhgfdsazxcvbnm]%', вот это работает всегда -- 4 4 4 select patindex(N'%[^01233456789qwertyuioplkjhgfdsazxcvbnm]%',N'123№123' collate Cyrillic_General_CI_AS) , patindex(N'%[^01233456789qwertyuioplkjhgfdsazxcvbnm]%',N'123№123' collate Latin1_General_CI_AS) , patindex(N'%[^01233456789qwertyuioplkjhgfdsazxcvbnm]%',N'123№123') -- 4 4 4 select patindex('%[^01233456789qwertyuioplkjhgfdsazxcvbnm]%','123№123' collate Cyrillic_General_CI_AS) , patindex('%[^01233456789qwertyuioplkjhgfdsazxcvbnm]%','123№123' collate Latin1_General_CI_AS) , patindex('%[^01233456789qwertyuioplkjhgfdsazxcvbnm]%','123№123') -- 0 0 0 select patindex(N'%[^0-9a-z]%',N'123№123' collate Cyrillic_General_CI_AS) , patindex(N'%[^0-9a-z]%',N'123№123' collate Latin1_General_CI_AS) , patindex(N'%[^0-9a-z]%',N'123№123') -- 0 4 0 select patindex('%[^0-9a-z]%','123№123' collate Cyrillic_General_CI_AS) , patindex('%[^0-9a-z]%','123№123' collate Latin1_General_CI_AS) , patindex('%[^0-9a-z]%','123№123') |
||||
2 июл 19, 10:43 [21918775] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31778 |
Выполните, если можно, мой скрипт выше, что он у вас покажет? |
||
2 июл 19, 10:45 [21918776] Ответить | Цитировать Сообщить модератору |
Yuri Abele Member Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe Сообщений: 1661 |
К сообщению приложен файл. Размер - 28Kb |
2 июл 19, 11:00 [21918796] Ответить | Цитировать Сообщить модератору |
Yuri Abele Member Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe Сообщений: 1661 |
Т.е., похоже, оно и без UNICODE и без COLLATE работает, если, как Вы сказали, перечислить все символы (я бы только до диапазонов сократил: [^0-9a-zA-Z] |
2 июл 19, 11:05 [21918801] Ответить | Цитировать Сообщить модератору |
Yuri Abele Member Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe Сообщений: 1661 |
А, ну да, Вы это в последнем запросе и сделали |
||
2 июл 19, 11:06 [21918804] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31778 |
У вас в последнем запросе 4 4 4, у меня 0 4 0 (и у ТС). Значит, у вас какая то другие настройки (даже не буду выяснять, какие, т.к. применять в работе эти знания нельзя). Итого, повторю вывод ещё раз (впрочем, на форуме его неоднократно озвучивали) - использовать диапазоны в patindex, like, etc нельзя. |
||
2 июл 19, 11:44 [21918861] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |