Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Шаблон like и символ номера в локали Cyrillic_General_CI_AS / 13 сообщений из 13, страница 1 из 1
28.06.2019, 17:14
    #39831733
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон like и символ номера в локали Cyrillic_General_CI_AS
SQL x64 2014 12.0.5000.0
Код: sql
1.
2.
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


Это ошибка, что символ не попадает под шаблон или верное поведение? Где-нибудь детальная документация по локалям есть?
...
Рейтинг: 0 / 0
28.06.2019, 17:24
    #39831740
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон like и символ номера в локали Cyrillic_General_CI_AS
такой байдизайн, уже очень давно

http://www.sql.ru/forum/939241/proverka-na-simvoly-v-ms-sql
...
Рейтинг: 0 / 0
28.06.2019, 17:29
    #39831742
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон like и символ номера в локали Cyrillic_General_CI_AS
Благодарю. Видимо, придётся упоминать Cyrillic_General_ BIN :
Код: sql
1.
select	patindex('%[^0-9a-z]%','123№123' collate Cyrillic_General_BIN)	--4
...
Рейтинг: 0 / 0
28.06.2019, 17:40
    #39831748
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон like и символ номера в локали Cyrillic_General_CI_AS
tunknownЭто ошибка, что символ не попадает под шаблон или верное поведение? Где-нибудь детальная документация по локалям есть?

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

Код: sql
1.
2.
3.
4.
5.
6.
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)
...
Рейтинг: 0 / 0
01.07.2019, 17:08
    #39832417
Yuri Abele
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон like и символ номера в локали Cyrillic_General_CI_AS
Поставьте перед ВСЕМИ открывающими апострофами латинскую N ( N 'мой UNICODE текст') и будет счастие!
...
Рейтинг: 0 / 0
02.07.2019, 09:17
    #39832579
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон like и символ номера в локали Cyrillic_General_CI_AS
Yuri AbeleПоставьте перед ВСЕМИ открывающими апострофами латинскую N ( N 'мой UNICODE текст') и будет счастие!Стало хуже, т.к. сломался и Latin1_General_CI_AS. Или я неправильно понял?

Код: sql
1.
2.
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
...
Рейтинг: 0 / 0
02.07.2019, 09:49
    #39832589
Yuri Abele
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон like и символ номера в локали Cyrillic_General_CI_AS
tunknownYuri AbeleПоставьте перед ВСЕМИ открывающими апострофами латинскую N ( N 'мой UNICODE текст') и будет счастие!Стало хуже, т.к. сломался и Latin1_General_CI_AS. Или я неправильно понял?
А если скрипты сохранять как UTF-8 файлы, и убрать нафиг этот collate вообще?
Последние года так работаем и всегда хватало.
...
Рейтинг: 0 / 0
02.07.2019, 10:43
    #39832606
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон like и символ номера в локали Cyrillic_General_CI_AS
Yuri Abeletunknownпропущено...
Стало хуже, т.к. сломался и Latin1_General_CI_AS. Или я неправильно понял?
А если скрипты сохранять как UTF-8 файлы, и убрать нафиг этот collate вообще?
Последние года так работаем и всегда хватало.Так тоже не работает
Тут же проблема не только в корректной передачи символов (само собой, что их нужно передавать правильно), а в весе символов, то есть в том, попадает символ "№" в диапазон a-z, или не попадает (и при каких условиях).
Для гарантии нужно писать не '%[^0-9a-z]%', а '%[^01233456789qwertyuioplkjhgfdsazxcvbnm]%', вот это работает всегда
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
--	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') 
...
Рейтинг: 0 / 0
02.07.2019, 10:45
    #39832607
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон like и символ номера в локали Cyrillic_General_CI_AS
Yuri AbeleПоследние года так работаем и всегда хватало.Возможно, вам не попадался "№"?
Выполните, если можно, мой скрипт выше, что он у вас покажет?
...
Рейтинг: 0 / 0
02.07.2019, 11:00
    #39832619
Yuri Abele
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон like и символ номера в локали Cyrillic_General_CI_AS
...
Рейтинг: 0 / 0
02.07.2019, 11:05
    #39832622
Yuri Abele
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон like и символ номера в локали Cyrillic_General_CI_AS
Т.е., похоже, оно и без UNICODE и без COLLATE работает, если, как Вы сказали, перечислить все символы (я бы только до диапазонов сократил: [^0-9a-zA-Z]
...
Рейтинг: 0 / 0
02.07.2019, 11:06
    #39832625
Yuri Abele
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон like и символ номера в локали Cyrillic_General_CI_AS
Yuri AbeleТ.е., похоже, оно и без UNICODE и без COLLATE работает, если, как Вы сказали, перечислить все символы (я бы только до диапазонов сократил: [^0-9a-zA-Z]
А, ну да, Вы это в последнем запросе и сделали
...
Рейтинг: 0 / 0
02.07.2019, 11:44
    #39832665
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон like и символ номера в локали Cyrillic_General_CI_AS
Yuri AbeleТ.е., похоже, оно и без UNICODE и без COLLATE работает, если, как Вы сказали, перечислить все символы (я бы только до диапазонов сократил: [^0-9a-zA-Z]С UNICODE не работает никогда, а без UNICODE зависит от коллейтов (указанного, а так же базы и сервера)

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

Итого, повторю вывод ещё раз (впрочем, на форуме его неоднократно озвучивали) - использовать диапазоны в patindex, like, etc нельзя.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Шаблон like и символ номера в локали Cyrillic_General_CI_AS / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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