Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Проверить текст на соответствие маске "Число:Число:Число"  [new]
Alexeyd
Member

Откуда:
Сообщений: 17
Имеется текстовое поле со значениями вида "Число:Число:Число"(неограниченное число групп: число + двоеточие), напр. 123:646:213. Иногда встречаются значения, в которых попадаются левые символы - не цифры и не двоеточие, напр. 123:646:213/2 или 123:6 46:213
Как в запросе проверить наличие этих самых левых символов?
30 мар 15, 15:04    [17450291]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4378
Alexeyd
Имеется текстовое поле со значениями вида "Число:Число:Число"(неограниченное число групп: число + двоеточие), напр. 123:646:213. Иногда встречаются значения, в которых попадаются левые символы - не цифры и не двоеточие, напр. 123:646:213/2 или 123:6 46:213
Как в запросе проверить наличие этих самых левых символов?

CHARINDEX, PATINDEX
30 мар 15, 15:08    [17450324]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
ЦБ
Member [заблокирован]

Откуда:
Сообщений: 2773
Alexeyd,

field like '%[^0-9:]%'
30 мар 15, 15:11    [17450342]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
Alexeyd
Member

Откуда:
Сообщений: 17
ЦБ
Alexeyd,

field like '%[^0-9:]%'

Не срабатывает, в эту маску попадают и такие значения, которые надо выкинуть из выборки:
5102:126/17
30 мар 15, 15:14    [17450360]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4378
Alexeyd
ЦБ
Alexeyd,

field like '%[^0-9:]%'

Не срабатывает, в эту маску попадают и такие значения, которые надо выкинуть из выборки:
5102:126/17

А вы что хотели? Найти некорректные записи? Или наоборот?
30 мар 15, 15:16    [17450371]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
Alexeyd
Member

Откуда:
Сообщений: 17
SQL2008,
CHARINDEX
- хорошо, но не перебирать же им все овер 240 лишних символов.
PATINDEX
- мне не приходит на ум маска, которой можно исключить лишнее, поможете?
30 мар 15, 15:16    [17450372]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
ЦБ
Member [заблокирован]

Откуда:
Сообщений: 2773
Alexeyd
ЦБ
Alexeyd,

field like '%[^0-9:]%'

Не срабатывает, в эту маску попадают и такие значения, которые надо выкинуть из выборки:
5102:126/17
Ты не понял
В эту "маску" только и попадают "значения, которые надо выкинуть из выборки", они и только они
А попадают, потому что твой вопрос звучал
автор
Как в запросе проверить наличие этих самых левых символов?

"проверить", а не "исключить"
30 мар 15, 15:17    [17450384]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
Alexeyd
Member

Откуда:
Сообщений: 17
SQL2008
А вы что хотели? Найти некорректные записи? Или наоборот?

Некорректные. Я так думаю, что найдя некорректные, можно найти и корректные, поставив(убрав)
NOT
.
Предложенный вариант выбирает всё подряд.
30 мар 15, 15:19    [17450395]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
ЦБ
Member [заблокирован]

Откуда:
Сообщений: 2773
Alexeyd
Предложенный вариант выбирает всё подряд.
не свисти ! :)
30 мар 15, 15:20    [17450403]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
Alexeyd
Member

Откуда:
Сообщений: 17
Alexeyd
Предложенный вариант выбирает всё подряд.

Я ошибся, всё правильно - выбирает только некорректные, спасибо! Тему можно закрыть.
30 мар 15, 15:21    [17450412]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4378
Alexeyd
SQL2008
А вы что хотели? Найти некорректные записи? Или наоборот?

Некорректные. Я так думаю, что найдя некорректные, можно найти и корректные, поставив(убрав)
NOT
.
Предложенный вариант выбирает всё подряд.


Ну сделайте наоборот
field like '%[0-9]%' and field like '%:%' and field not like '%[^0-9:]%'
30 мар 15, 15:23    [17450430]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
+

ext.Regex_IsMatch

+ ext.Regex_IsMatch (с пушки по воробьям жахнем)

with t0(d) as
(
	select N'123:646:213' union all
	select N'123:646:213/2' union all
	select N'123:6 46:213' union all
	select N'123::6 46:213'
)
select *
from
	t0
where
	ext.Regex_IsMatch(d, N'^\d+(:\d+)*$', null) = 1;

30 мар 15, 15:26    [17450444]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4378
Вы предлагаете поставить это на сервер?
30 мар 15, 15:41    [17450564]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
SQL2008
Вы предлагаете поставить это на сервер?


а ви с какой целью интегесуетесь?

да, предлагаю поставить/написать свое/скомпилить исходники по ссылке и поставить. тем самым закрыть 100500 затычек по причесыванию данных и тем "помогите распарсить..." одним махом.
30 мар 15, 15:53    [17450633]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4378
churupaha
SQL2008
Вы предлагаете поставить это на сервер?


а ви с какой целью интегесуетесь?

да, предлагаю поставить/написать свое/скомпилить исходники по ссылке и поставить.

Ну если это ваш личный комп, то безусловно.
А если боевой корпоративный?
Кто даст вам это сделать?
30 мар 15, 16:26    [17450794]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
ЦБ
Member [заблокирован]

Откуда:
Сообщений: 2773
SQL2008,

извините, а вы понимаете, что эти функции, после "установки", можно будет использовать не единожды?

SQL2008
А если боевой корпоративный?
Кто даст вам это сделать?

Наверное тот, кто понимает, что каждый раз "ваять" километровую функцию проверки, замены и прочего "парсинга" это хуже,
чем один раз "инсталлировать" сборку, и потом 100500 раз её использовать :)
30 мар 15, 16:39    [17450877]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
SQL2008
А если боевой корпоративный?
Кто даст вам это сделать?


Тот, кто принимает решения по-остальному коду. Надо только объяснить/успокоить/поговорить...
30 мар 15, 16:39    [17450881]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
iap
Member

Откуда: Москва
Сообщений: 47024
churupaha
SQL2008
А если боевой корпоративный?
Кто даст вам это сделать?


Тот, кто принимает решения по-остальному коду. Надо только объяснить/успокоить/поговорить...
шантажировать!
30 мар 15, 16:41    [17450896]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4378
ЦБ
SQL2008,

извините, а вы понимаете, что эти функции, после "установки", можно будет использовать не единожды?

SQL2008
А если боевой корпоративный?
Кто даст вам это сделать?

Наверное тот, кто понимает, что каждый раз "ваять" километровую функцию проверки, замены и прочего "парсинга" это хуже,
чем один раз "инсталлировать" сборку, и потом 100500 раз её использовать :)

Вы с буржуями когда-нибудь работали?
В иностранной компании, например?
Даже просто перезапустить службу сервера вы не можете без длительного согласования и апрувов.
30 мар 15, 16:46    [17450937]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
ЦБ
Member [заблокирован]

Откуда:
Сообщений: 2773
SQL2008
Даже просто перезапустить службу сервера вы не можете без длительного согласования и апрувов.
Не вижу никакого противоречия.
"Да" - согласовать, "да" - убедить.
Никто не говорит, что это нужно поставить просто "чтобы было".
Через Regex многие задачи решаются значительно "элегантнее", а некоторые, так я просто не представляю как сделать без Regex (удалить теги, например, в загруженных HTML-страницах).
Зачем-то ж эти "буржуи из МС", дали такую возможность - создавать сборки для сервера? :)
30 мар 15, 17:01    [17451020]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8047
Чтобы увеличить рынок продаж, больше ни для чего. А то Оракле отжимает юзеров. Классический сервер БД вообще не должен заниматься постобработкой.
30 мар 15, 18:00    [17451334]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
Glory
Member

Откуда:
Сообщений: 104760
ЦБ
Через Regex многие задачи решаются значительно "элегантнее", а некоторые, так я просто не представляю как сделать без Regex (удалить теги, например, в загруженных HTML-страницах).
Зачем-то ж эти "буржуи из МС", дали такую возможность - создавать сборки для сервера? :)

ну так понятно зачем - чтобы нарушать реляционность баз
Можно забацать одну таблицу с одним blob полем, в котором хранить данные. И работать с ними через clr типа regex
30 мар 15, 18:04    [17451350]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
подолью маслица (участвовать в холиваре не буду):

+

* регексами можно делать годные check constraint'ы
* по мне так регексы выглядят более декларативно в тексте DML. позволяет сформулировать что нужно получить. тогда, как вывертоны substring(substring(substring(charindex(......)))) это скорее инструкции, как получить результат, а не что нужно получить (мое восприятие текстов).
* поддерживать легче (если все знают очень хорошо regex'ы)
* всякие "проблемы" с сопровождением не хочу обсуждать, просто потому что их нет, равно как нет проблем с безопасностью (рычагов достаточно для руления). есть админы/разработчики, которым не хочется по необъективным причинам.

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

* мне не понятно, почему до сих пор нет поддержки из коробки.
30 мар 15, 18:40    [17451461]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4378
churupaha
* мне не понятно, почему до сих пор нет поддержки из коробки.

Вот тут присоединюсь на 100500!
Такому решению было бы 100%-е доверие.
30 мар 15, 18:47    [17451483]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
Glory
Member

Откуда:
Сообщений: 104760
churupaha
* никто не призывает хранить все в BLOB'ах и обрабатывать Regex'ами. тут все отписавшиеся люди технически подкованные и прекрасно понимают где это может быть полезно, но зачем высасывать из пальца не ясно.

Ваш пример в данном случае делает именно это.
Потому что парсит поле таблицы. Которое своим содержимым нарушает реляционность.
30 мар 15, 20:03    [17451671]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить