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

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

Откуда: Москва
Сообщений: 4312
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

Откуда: Москва
Сообщений: 4312
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

Откуда: Москва
Сообщений: 4312
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

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

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


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

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

Откуда: Москва
Сообщений: 4312
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

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


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

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

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

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

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

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

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

Откуда:
Сообщений: 7955
Чтобы увеличить рынок продаж, больше ни для чего. А то Оракле отжимает юзеров. Классический сервер БД вообще не должен заниматься постобработкой.
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

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

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

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

Ваш пример в данном случае делает именно это.
Потому что парсит поле таблицы. Которое своим содержимым нарушает реляционность.
30 мар 15, 20:03    [17451671]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
churupaha
Member

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

1) ну 1НФ нарушил точно не код, а тот, кто проектировал схему данных. да и проектировал ли. вангую, что это какой-то левый источник данных, из которого нужно что-то залить по быстрому.

2) а если вы считаете, всеже, что именно код с regex'ом нарушил 1НФ, тут хотелось бы возразить тоже. цимес regex именно в декларативности когда я пишу Regex_IsMatch(col, pattern, null), я не парсю и меня с точки зрения логики на данном этапе не интересует механика под капотом, я лишь говорю: 'верни ка мне все последовательности такого сорта', это как написать where color = 'Red' или написать where name like 'Аль%'. так что это спорный вопрос. я не работаю с компонентами колонки, она не выглядит для меня не атомарной, она в задаче устраивает в рамках задачи в том виде котором она есть, я всего лишь прошу от СУБД, какие строки мне надо. а вот если бы я делал это явно substring(substring(substring(...))), то да. ну это я так за уши притянул, чтобы задать встречный вопрос, а что код c substring(substring(substring(...))) на T-SQL не нарушает "... реляционность..." (я даже не об этом случае, а вообще, тут таких топиков несколько штук в день).

это как с едой, можно посолить и будет вкусно, а можно и пересолить и будет не вкусно.
30 мар 15, 20:28    [17451760]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
Glory
Member

Откуда:
Сообщений: 104760
churupaha
2) а если вы считаете, всеже, что именно код с regex'ом нарушил 1НФ,

Я и написал, что ваш regex в данном случае только поощеряет всевозможные нарушения нормальных форм.
Потому что позволяет работать с регулярной структурой, записанной в blob поле
30 мар 15, 20:33    [17451771]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
churupaha
Member

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

там вконце второго пункта вопрос...
30 мар 15, 20:40    [17451795]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
iap
Member

Откуда: Москва
Сообщений: 47007
churupaha
Glory,

там вконце второго пункта вопрос...
В упор не вижу
30 мар 15, 20:42    [17451799]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
churupaha
Member

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

а что код c substring(substring(substring(...))) на T-SQL не нарушает "... реляционность..."
30 мар 15, 20:43    [17451805]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
ЦБ
Member [заблокирован]

Откуда:
Сообщений: 2773
Glory
churupaha
2) а если вы считаете, всеже, что именно код с regex'ом нарушил 1НФ,

Я и написал, что ваш regex в данном случае только поощеряет всевозможные нарушения нормальных форм.
Потому что позволяет работать с регулярной структурой, записанной в blob поле
Regex_IsMatch - поощряет,
но если завтра ТС "прозреет" и потянется к нормализации, точно так же его тягу к этому будет поощрять Regex_Split

... так что тут не всё так однозначно :)
30 мар 15, 20:44    [17451814]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
Glory
Member

Откуда:
Сообщений: 104760
churupaha
iap,

а что код c substring(substring(substring(...))) на T-SQL не нарушает "... реляционность..."

Код substring(substring(substring(...))) не поощеряет хранение в блоб-поле регулярных структур.
В отличии от элегантного RegEx
30 мар 15, 20:45    [17451816]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
churupaha
Member

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

Картинка с другого сайта.
30 мар 15, 20:45    [17451818]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
Glory
Member

Откуда:
Сообщений: 104760
churupaha
+ вот что тут происходит сейчас

Картинка с другого сайта.

Сейчас происходит то же самое, что у a_voronin-а с его in-memory
Практически в каждой теме по парсингу поститься regex.
без всякого "это как с едой, можно посолить и будет вкусно, а можно и пересолить и будет не вкусно." и тем более "и прекрасно понимают где это может быть полезно"
30 мар 15, 20:50    [17451833]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Glory
churupaha
+ вот что тут происходит сейчас

Картинка с другого сайта.

Сейчас происходит то же самое, что у a_voronin-а с его in-memory
Практически в каждой теме по парсингу поститься regex.
без всякого "это как с едой, можно посолить и будет вкусно, а можно и пересолить и будет не вкусно." и тем более "и прекрасно понимают где это может быть полезно"


Вы считаете, что простыня гавнакода с substring'ами и непонятно где открывающимися скобками это не "... in memory..." ? o_O По мне, так уж лучше пара букв на регексе, чем завонявшая портянка.
30 мар 15, 20:58    [17451851]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
Glory
Member

Откуда:
Сообщений: 104760
churupaha
Вы считаете, что простыня гавнакода с substring'ами и непонятно где открывающимися скобками это не "... in memory..." ? o_O По мне, так уж лучше пара букв на регексе, чем завонявшая портянка.

Где в данной конкретной теме вы увидели эту простыню в качестве предлагаемого решения ?
30 мар 15, 22:12    [17452094]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Glory
churupaha
Вы считаете, что простыня гавнакода с substring'ами и непонятно где открывающимися скобками это не "... in memory..." ? o_O По мне, так уж лучше пара букв на регексе, чем завонявшая портянка.

Где в данной конкретной теме вы увидели эту простыню в качестве предлагаемого решения ?


ну вы то уже перешли в контекст всех остальных тем

Glory
Практически в каждой теме по парсингу поститься regex.


логично не правда ли, для парсинга строк использовать regex?

MS connect: Regex functionality in pattern matching
MS connect: Add built-in support for regular expressions in T-SQL

Posted by Microsoft on 8/20/2007 at 10:21 PM
Hello,

First of all i would like to thank all of you for sending your feedback to us. We are definitely going to consider adding this capability in the query language in a future release. However, until then have you considered using CLR integration for this purpose. .NET has the capability and it is very simple to use .NET to add this capability by adding a user-defined function that does this. The blog entry https://blogs.msdn.com/sqlclr/archive/2005/06/29/regex.aspx has sample code and discusses the available options via .NET.

Thanks,
Vineet Rao
Program Manager
Microsoft SQL Server



В некоторых других СУБД:

MySQL regex
Oracle regex


--
Glory, не троллинга ради, а как вы относитесь к xml/spatial типам данных?
30 мар 15, 22:28    [17452150]     Ответить | Цитировать Сообщить модератору
 Re: Проверить текст на соответствие маске "Число:Число:Число"  [new]
churupaha
Member

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

PostgreeSQL regex
30 мар 15, 22:56    [17452266]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Microsoft SQL Server Ответить