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

Откуда:
Сообщений: 748
SQL x64 2014 12.0.5000.0
select	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]     Ответить | Цитировать Сообщить модератору
 Re: Шаблон like и символ номера в локали Cyrillic_General_CI_AS  [new]
Konst_One
Member

Откуда:
Сообщений: 11512
такой байдизайн, уже очень давно

https://www.sql.ru/forum/939241/proverka-na-simvoly-v-ms-sql
28 июн 19, 17:24    [21917236]     Ответить | Цитировать Сообщить модератору
 Re: Шаблон like и символ номера в локали Cyrillic_General_CI_AS  [new]
tunknown
Member

Откуда:
Сообщений: 748
Благодарю. Видимо, придётся упоминать Cyrillic_General_BIN:
select	patindex('%[^0-9a-z]%','123№123' collate Cyrillic_General_BIN)	--4
28 июн 19, 17:29    [21917238]     Ответить | Цитировать Сообщить модератору
 Re: Шаблон like и символ номера в локали Cyrillic_General_CI_AS  [new]
Shakill
Member

Откуда: мск
Сообщений: 1870
tunknown
Это ошибка, что символ не попадает под шаблон или верное поведение? Где-нибудь детальная документация по локалям есть?


если проблема локализована, то правила сравнения можно поковырять, конечно, чтобы увидеть в каком диапазоне символ находится. но готовых символьных таблиц по коллейшенам не видел

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]     Ответить | Цитировать Сообщить модератору
 Re: Шаблон like и символ номера в локали Cyrillic_General_CI_AS  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
Поставьте перед ВСЕМИ открывающими апострофами латинскую N (N'мой UNICODE текст') и будет счастие!
1 июл 19, 17:08    [21918374]     Ответить | Цитировать Сообщить модератору
 Re: Шаблон like и символ номера в локали Cyrillic_General_CI_AS  [new]
tunknown
Member

Откуда:
Сообщений: 748
Yuri Abele
Поставьте перед ВСЕМИ открывающими апострофами латинскую N (N'мой UNICODE текст') и будет счастие!
Стало хуже, т.к. сломался и Latin1_General_CI_AS. Или я неправильно понял?

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]     Ответить | Цитировать Сообщить модератору
 Re: Шаблон like и символ номера в локали Cyrillic_General_CI_AS  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
tunknown
Yuri Abele
Поставьте перед ВСЕМИ открывающими апострофами латинскую N (N'мой UNICODE текст') и будет счастие!
Стало хуже, т.к. сломался и Latin1_General_CI_AS. Или я неправильно понял?

А если скрипты сохранять как UTF-8 файлы, и убрать нафиг этот collate вообще?
Последние года так работаем и всегда хватало.
2 июл 19, 09:49    [21918726]     Ответить | Цитировать Сообщить модератору
 Re: Шаблон like и символ номера в локали Cyrillic_General_CI_AS  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30702
Yuri Abele
tunknown
пропущено...
Стало хуже, т.к. сломался и Latin1_General_CI_AS. Или я неправильно понял?

А если скрипты сохранять как UTF-8 файлы, и убрать нафиг этот collate вообще?
Последние года так работаем и всегда хватало.
Так тоже не работает
Тут же проблема не только в корректной передачи символов (само собой, что их нужно передавать правильно), а в весе символов, то есть в том, попадает символ "№" в диапазон 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]     Ответить | Цитировать Сообщить модератору
 Re: Шаблон like и символ номера в локали Cyrillic_General_CI_AS  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30702
Yuri Abele
Последние года так работаем и всегда хватало.
Возможно, вам не попадался "№"?
Выполните, если можно, мой скрипт выше, что он у вас покажет?
2 июл 19, 10:45    [21918776]     Ответить | Цитировать Сообщить модератору
 Re: Шаблон like и символ номера в локали Cyrillic_General_CI_AS  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661


К сообщению приложен файл. Размер - 28Kb
2 июл 19, 11:00    [21918796]     Ответить | Цитировать Сообщить модератору
 Re: Шаблон like и символ номера в локали Cyrillic_General_CI_AS  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
Т.е., похоже, оно и без UNICODE и без COLLATE работает, если, как Вы сказали, перечислить все символы (я бы только до диапазонов сократил: [^0-9a-zA-Z]
2 июл 19, 11:05    [21918801]     Ответить | Цитировать Сообщить модератору
 Re: Шаблон like и символ номера в локали Cyrillic_General_CI_AS  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
Yuri Abele
Т.е., похоже, оно и без UNICODE и без COLLATE работает, если, как Вы сказали, перечислить все символы (я бы только до диапазонов сократил: [^0-9a-zA-Z]

А, ну да, Вы это в последнем запросе и сделали
2 июл 19, 11:06    [21918804]     Ответить | Цитировать Сообщить модератору
 Re: Шаблон like и символ номера в локали Cyrillic_General_CI_AS  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30702
Yuri Abele
Т.е., похоже, оно и без UNICODE и без COLLATE работает, если, как Вы сказали, перечислить все символы (я бы только до диапазонов сократил: [^0-9a-zA-Z]
С UNICODE не работает никогда, а без UNICODE зависит от коллейтов (указанного, а так же базы и сервера)

У вас в последнем запросе 4 4 4, у меня 0 4 0 (и у ТС).
Значит, у вас какая то другие настройки (даже не буду выяснять, какие, т.к. применять в работе эти знания нельзя).

Итого, повторю вывод ещё раз (впрочем, на форуме его неоднократно озвучивали) - использовать диапазоны в patindex, like, etc нельзя.
2 июл 19, 11:44    [21918861]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить