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

Откуда:
Сообщений: 7882
Прошу помощи...
Сервер MS SQL 2008R2

Имеется инфа о серии документа...
Требования к серии:
1. в серии должен быть дефис
2. Часть перед дефисом может содержать только буквы I, X, V, L, C, D, M (латинские) или Х, С, М русские. Содержит не меньше одной буквы.
3. Часть после дефиса может содержать только русские заглавные буквы количеством ровно 2 штуки.

Т.е. из набора:
SELECT name FROM
(SELECT 'XIII-РЕ' name UNION ALL
 SELECT '1234567' UNION ALL
 SELECT '1-ФМ' UNION ALL
 SELECT 'I-КИ' UNION ALL
 SELECT '12-УК' UNION ALL
 SELECT 'XM-САР' UNION ALL
 SELECT 'X-ГН'
) x
WHERE name like ....
должны выбраться
name
XIII-РЕ
I-КИ
X-ГН

Что-то аналогичное в Предикат LIKE и регулярные выражения
20 июл 16, 03:37    [19429518]     Ответить | Цитировать Сообщить модератору
 Re: Предикат LIKE и регулярные выражения  [new]
d_lendnev
Guest
думаю как то так: WHERE name like '%[IXVLCDMХСМ]-[А-Я][А-Я]'
20 июл 16, 04:19    [19429522]     Ответить | Цитировать Сообщить модератору
 Re: Предикат LIKE и регулярные выражения  [new]
Владимир СА
Member

Откуда:
Сообщений: 7882
d_lendnev
думаю как то так: WHERE name like '%[IXVLCDMХСМ]-[А-Я][А-Я]'
Спасибо...
20 июл 16, 06:04    [19429543]     Ответить | Цитировать Сообщить модератору
 Re: Предикат LIKE и регулярные выражения  [new]
iap
Member

Откуда: Москва
Сообщений: 47052
Владимир СА
d_lendnev
думаю как то так: WHERE name like '%[IXVLCDMХСМ]-[А-Я][А-Я]'
Спасибо...
Так это ж неправильно!
Не верите? Допишите на первое место в строке что-нибудь неправильное - этот шаблон пропустит (ибо начинается с %).

Это, видимо, римские числа в начале строк?
Но буквы в них не могут стоять в произвольном порядке.
20 июл 16, 10:24    [19430037]     Ответить | Цитировать Сообщить модератору
 Re: Предикат LIKE и регулярные выражения  [new]
Владимир СА
Member

Откуда:
Сообщений: 7882
iap
Владимир СА
пропущено...
Спасибо...
Так это ж неправильно!
Не верите? Допишите на первое место в строке что-нибудь неправильное - этот шаблон пропустит (ибо начинается с %).

Это, видимо, римские числа в начале строк?
Но буквы в них не могут стоять в произвольном порядке.
Да, т.к. данные уже вбиты (и они уже задокументированы), то мы пока не рассматриваем на правильность составления римского числа... Хотя для меня это будет БОЛЬШАЯ проблема...
Кто-то проверял на правильность составления римского числа ?
20 июл 16, 10:27    [19430053]     Ответить | Цитировать Сообщить модератору
 Re: Предикат LIKE и регулярные выражения  [new]
iap
Member

Откуда: Москва
Сообщений: 47052
Владимир СА
iap
пропущено...
Так это ж неправильно!
Не верите? Допишите на первое место в строке что-нибудь неправильное - этот шаблон пропустит (ибо начинается с %).

Это, видимо, римские числа в начале строк?
Но буквы в них не могут стоять в произвольном порядке.
Да, т.к. данные уже вбиты (и они уже задокументированы), то мы пока не рассматриваем на правильность составления римского числа... Хотя для меня это будет БОЛЬШАЯ проблема...
Кто-то проверял на правильность составления римского числа ?
Проверка валидности номера свидетельства о рождении
20 июл 16, 10:33    [19430083]     Ответить | Цитировать Сообщить модератору
 Re: Предикат LIKE и регулярные выражения  [new]
Владимир СА
Member

Откуда:
Сообщений: 7882
iap
Владимир СА
пропущено...
Да, т.к. данные уже вбиты (и они уже задокументированы), то мы пока не рассматриваем на правильность составления римского числа... Хотя для меня это будет БОЛЬШАЯ проблема...
Кто-то проверял на правильность составления римского числа ?
Проверка валидности номера свидетельства о рождении
Блин... Спасибо ...
20 июл 16, 10:37    [19430107]     Ответить | Цитировать Сообщить модератору
 Re: Предикат LIKE и регулярные выражения  [new]
iap
Member

Откуда: Москва
Сообщений: 47052
Владимир СА
iap
пропущено...
Проверка валидности номера свидетельства о рождении
Блин... Спасибо ...
Только смотрите не только ссылку, а до конца темы
20 июл 16, 10:47    [19430158]     Ответить | Цитировать Сообщить модератору
 Re: Предикат LIKE и регулярные выражения  [new]
Владимир СА
Member

Откуда:
Сообщений: 7882
iap
Владимир СА
пропущено...
Блин... Спасибо ...
Только смотрите не только ссылку, а до конца темы
Да...
20 июл 16, 10:51    [19430176]     Ответить | Цитировать Сообщить модератору
 Re: Предикат LIKE и регулярные выражения  [new]
Владимир СА
Member

Откуда:
Сообщений: 7882
Владимир СА
d_lendnev
думаю как то так: WHERE name like '%[IXVLCDMХСМ]-[А-Я][А-Я]'
Спасибо...
Хм...
А не до конца проверяет предикат...
SELECT name FROM
(
 SELECT 'ЮI-БЯ' as name
) x
WHERE name collate Cyrillic_General_CS_AS like '%[IXVLCDMХСМ]-[А-Я][А-Я]';

И он считает это нормальным...
name
ЮI-БЯ

Т.е. предикат проверяет "I-БЯ" на правильность...
Как проверить предикатом всю левую часть серии на принадлежность всех букв из [IXVLCDMХСМ] ?
Или все таки надо парсить всю серию ? (что не очень хочется)
23 авг 16, 08:39    [19576724]     Ответить | Цитировать Сообщить модератору
 Re: Предикат LIKE и регулярные выражения  [new]
o-o
Guest
SELECT name FROM
(
 SELECT 'ЮI-БЯ' as name UNION ALL
 SELECT 'XIII-РЕ'  UNION ALL
 SELECT '1234567' UNION ALL
 SELECT '1-ФМ' UNION ALL
 SELECT 'I-КИ' UNION ALL
 SELECT '12-УК' UNION ALL
 SELECT 'XM-САР' UNION ALL
 SELECT 'X-ГН'
) x
WHERE name collate Cyrillic_General_CS_AS 
      like replicate('[IXVLCDMХСМ]', len(name) - 3) + '-[А-Я][А-Я]';
23 авг 16, 09:38    [19576931]     Ответить | Цитировать Сообщить модератору
 Re: Предикат LIKE и регулярные выражения  [new]
Владимир СА
Member

Откуда:
Сообщений: 7882
o-o
SELECT name FROM
(
 SELECT 'ЮI-БЯ' as name UNION ALL
 SELECT 'XIII-РЕ'  UNION ALL
 SELECT '1234567' UNION ALL
 SELECT '1-ФМ' UNION ALL
 SELECT 'I-КИ' UNION ALL
 SELECT '12-УК' UNION ALL
 SELECT 'XM-САР' UNION ALL
 SELECT 'X-ГН'
) x
WHERE name collate Cyrillic_General_CS_AS 
      like replicate('[IXVLCDMХСМ]', len(name) - 3) + '-[А-Я][А-Я]';
Точно спасибо...
Просто повторить левые символы... Хорошая идея...
23 авг 16, 09:58    [19577029]     Ответить | Цитировать Сообщить модератору
 Re: Предикат LIKE и регулярные выражения  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
А так?
SELECT name FROM
(
 SELECT 'ЮI-БЯ' as name UNION ALL
 SELECT 'XIII-РЕ'  UNION ALL
 SELECT '1234567' UNION ALL
 SELECT '1-ФМ' UNION ALL
 SELECT 'I-КИ' UNION ALL
 SELECT '12-УК' UNION ALL
 SELECT 'XM-САР' UNION ALL
 SELECT 'X-ГН'
) x
where name like '%[IXVLCDMХСМ]-[А-Я][А-Я]'
  and name not like '%[^IXVLCDMХСМ]%-%'
23 авг 16, 13:52    [19578662]     Ответить | Цитировать Сообщить модератору
 Re: Предикат LIKE и регулярные выражения  [new]
o-o
Guest
Serg_77m,
зря collate CS вышвырнули, теперь пропускает строчные буквы
23 авг 16, 14:40    [19579064]     Ответить | Цитировать Сообщить модератору
 Re: Предикат LIKE и регулярные выражения  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
o-o, да, согласен.
23 авг 16, 17:44    [19580464]     Ответить | Цитировать Сообщить модератору
 Re: Предикат LIKE и регулярные выражения  [new]
Владимир СА
Member

Откуда:
Сообщений: 7882
Хм... o-o, Serg_77m

+


В левой части хоть один символ... "-КВ"
SELECT name FROM
(
 SELECT 'XЮI-БЯ' as name UNION ALL
 SELECT 'XIII-РЕ'  UNION ALL
 SELECT '1234567' UNION ALL
 SELECT '1-ФМ' UNION ALL
 SELECT 'I-КИ' UNION ALL
 SELECT '12-УК' UNION ALL
 SELECT 'XM-САР' UNION ALL
 SELECT '-САР' UNION ALL
 SELECT '-КВ' UNION ALL
 SELECT 'X-ГН'
) x
WHERE name collate Cyrillic_General_CS_AS like replicate('[IXVLCDMХСМ]', len(name) - 3) + '-[А-Я][А-Я]'
	and len(name) - 3 > 0
;



SELECT name FROM
(
 SELECT 'XЮI-БЯ' as name UNION ALL
 SELECT 'XIII-РЕ'  UNION ALL
 SELECT '1234567' UNION ALL
 SELECT '1-ФМ' UNION ALL
 SELECT 'I-КИ' UNION ALL
 SELECT '12-УК' UNION ALL
 SELECT 'XM-САР' UNION ALL
 SELECT '-САР' UNION ALL
 SELECT '-КВ' UNION ALL
 SELECT 'X-ГН'
) x
where name collate Cyrillic_General_CS_AS like '%[IXVLCDMХСМ]-[А-Я][А-Я]'
  and name collate Cyrillic_General_CS_AS not like '%[^IXVLCDMХСМ]%-%'



Большое спасибо всем...
24 авг 16, 07:18    [19582384]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить