Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Регулярные выражения в MS SQL Server 2005

13
20 марта 2007 года
RussianSpy
3.0K / / 04.07.2006
Собственно сабж. Раскапываю MSDN - ничего внятного пока не нашел (плохо ищу?). Подскажите пожалуйста как реализовать запрос с регулярными выражениями или дайте линк на мануал/книгу. Буду очень признателен.
308
20 марта 2007 года
Комаджу
850 / / 26.07.2006
SQL-запрос? А почему нельзя LIKE использовать?
13
20 марта 2007 года
RussianSpy
3.0K / / 04.07.2006
Потому что необходима выборка по шаблону (поиск в таблице урлов).

Не уверен что LIKE поддерживает подобное. Или я ошибаюсь?
308
20 марта 2007 года
Комаджу
850 / / 26.07.2006
Мне кажется, всё равно. А можно конкретный пример?
337
20 марта 2007 года
shine
719 / / 09.06.2006
Есть вот такой обходной маневр: http://blogs.msdn.com/sqlclr/archive/2005/06/29/regex.aspx

Или нужно запрос выполнять из SP, тригера или чего то подобного в самом MSSQL сервере?
13
21 марта 2007 года
RussianSpy
3.0K / / 04.07.2006
Цитата: Комаджу
Мне кажется, всё равно. А можно конкретный пример?



Например надо выбрать пользователей по маске. Например надо выбрать хосты по маске. Или применить действие ко всем пользователям по маске IP адреса (к сожалению не я проективал БД и IP тут хранится не как целое число, а тупо 4 октета в виде строки). Неужели ты не встречал необходимости использования регулярок в SQL запросах?

13
21 марта 2007 года
RussianSpy
3.0K / / 04.07.2006
Цитата: shine
Есть вот такой обходной маневр: http://blogs.msdn.com/sqlclr/archive/2005/06/29/regex.aspx

Или нужно запрос выполнять из SP, тригера или чего то подобного в самом MSSQL сервере?



Это я видел - думал может есть способ проще...

308
21 марта 2007 года
Комаджу
850 / / 26.07.2006
Цитата: RussianSpy
Например надо выбрать пользователей по маске. Например надо выбрать хосты по маске.


Что-нить типа такого:
[HTML]SELECT * FROM table WHERE IP LIKE '%192.168.%'[/HTML]
Ну, там добавляешь фукции при необходимости, если нужно не всё значение проверять, а только, например, первые 8 символов.

Цитата: RussianSpy
Или применить действие ко всем пользователям по маске IP адреса (к сожалению не я проективал БД и IP тут хранится не как целое число, а тупо 4 октета в виде строки). Неужели ты не встречал необходимости использования регулярок в SQL запросах?

Целое или строковое - не столь важно. Если я правильно понял твою задачу, то можно работать через LIKE. А регулярные выражения я вообще только в теории знаю, потому что не программирую.

13
21 марта 2007 года
RussianSpy
3.0K / / 04.07.2006
Цитата: Комаджу
А регулярные выражения я вообще только в теории знаю, потому что не программирую.


В таком случае неудивительно что ты считаешь LIKE вполне достаточным. Если бы все было так просто...

308
21 марта 2007 года
Комаджу
850 / / 26.07.2006
Цитата: RussianSpy
В таком случае неудивительно что ты считаешь LIKE вполне достаточным. Если бы все было так просто...

Просто я не представляю запрос, который нельзя реализовать таким образом. Ну, безусловно, я не использую и 5 процентов возможностей сервера, но мои потребности удовлетворены на все 100%. Т.к. в первую очередь использую mssql как БД сайта. Сорри, что не помог ничем.

13
21 марта 2007 года
RussianSpy
3.0K / / 04.07.2006
Цитата: Комаджу
Просто я не представляю запрос, который нельзя реализовать таким образом.



Ну например выбрать ники всех пользователей удовлетворяющих условию "?Alex*2007" где знак "?" - один любой символ, знак "*" - набор любых символов, либо ни одного. Это лишь пример (как раз то что мне и нужно сейчас реализовать). В PostgreSQL и MySQL это делается легко...

308
21 марта 2007 года
Комаджу
850 / / 26.07.2006
Цитата: RussianSpy
Ну например выбрать ники всех пользователей удовлетворяющих условию "?Alex*2007" где знак "?" - один любой символ, знак "*" - набор любых символов, либо ни одного. Это лишь пример (как раз то что мне и нужно сейчас реализовать). В PostgreSQL и MySQL это делается легко...



 
Код:
SELECT * FROM table
WHERE MID(COL1,2,4) LIKE '%Alex%'
AND RIGHT(COL1,4) LIKE '%2007%'
13
21 марта 2007 года
RussianSpy
3.0K / / 04.07.2006
Цитата: Комаджу
 
Код:
SELECT * FROM table
WHERE MID(COL1,2,4) LIKE '%Alex%'
AND RIGHT(COL1,4) LIKE '%2007%'



Ну знаешь... Через substr() тоже можно все сделать... Но зачем?

И как такую конструкцию генерить динамически? Шаблоны-то юзер может ввести любые

308
21 марта 2007 года
Комаджу
850 / / 26.07.2006
Ну, я же говорю - конкретный запрос я реализовать смогу без РВ.
А насчет динамического создания шаблона - можно сделать. Не знаю, насколько это верно, не программирую потому что, но что-то типа такого:
 
Код:
Search1 - условие запроса.

Если
    Search1 в начале искомой конструкции, то
    LEFT(COL1,КоличесвоСимволовВSearch1),
    в противном случае
        Если
            Search1 в конце искомой конструкции...


И так далее, всего получается 4 условия: начало конструкции; конец конструкции; известно, с какого символа начинается; неизвестно, с какого символа начинается.

Если условий запроса несколько, то повторить и прочее..
Согласен, что решение может быть не особо изящным - повторю, я не спец в каком-либо программировании - но это решение вполне себе рабочее. Почему нет? Тем более, что сходу найти РВ в mssql не получилось.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог