Регулярные выражения в MS SQL Server 2005
Не уверен что LIKE поддерживает подобное. Или я ошибаюсь?
Или нужно запрос выполнять из SP, тригера или чего то подобного в самом MSSQL сервере?
Например надо выбрать пользователей по маске. Например надо выбрать хосты по маске. Или применить действие ко всем пользователям по маске IP адреса (к сожалению не я проективал БД и IP тут хранится не как целое число, а тупо 4 октета в виде строки). Неужели ты не встречал необходимости использования регулярок в SQL запросах?
Или нужно запрос выполнять из SP, тригера или чего то подобного в самом MSSQL сервере?
Это я видел - думал может есть способ проще...
Что-нить типа такого:
[HTML]SELECT * FROM table WHERE IP LIKE '%192.168.%'[/HTML]
Ну, там добавляешь фукции при необходимости, если нужно не всё значение проверять, а только, например, первые 8 символов.
Целое или строковое - не столь важно. Если я правильно понял твою задачу, то можно работать через LIKE. А регулярные выражения я вообще только в теории знаю, потому что не программирую.
В таком случае неудивительно что ты считаешь LIKE вполне достаточным. Если бы все было так просто...
Просто я не представляю запрос, который нельзя реализовать таким образом. Ну, безусловно, я не использую и 5 процентов возможностей сервера, но мои потребности удовлетворены на все 100%. Т.к. в первую очередь использую mssql как БД сайта. Сорри, что не помог ничем.
Ну например выбрать ники всех пользователей удовлетворяющих условию "?Alex*2007" где знак "?" - один любой символ, знак "*" - набор любых символов, либо ни одного. Это лишь пример (как раз то что мне и нужно сейчас реализовать). В PostgreSQL и MySQL это делается легко...
WHERE MID(COL1,2,4) LIKE '%Alex%'
AND RIGHT(COL1,4) LIKE '%2007%'
WHERE MID(COL1,2,4) LIKE '%Alex%'
AND RIGHT(COL1,4) LIKE '%2007%'
Ну знаешь... Через substr() тоже можно все сделать... Но зачем?
И как такую конструкцию генерить динамически? Шаблоны-то юзер может ввести любые
А насчет динамического создания шаблона - можно сделать. Не знаю, насколько это верно, не программирую потому что, но что-то типа такого:
Если
Search1 в начале искомой конструкции, то
LEFT(COL1,КоличесвоСимволовВSearch1),
в противном случае
Если
Search1 в конце искомой конструкции...
И так далее, всего получается 4 условия: начало конструкции; конец конструкции; известно, с какого символа начинается; неизвестно, с какого символа начинается.
Если условий запроса несколько, то повторить и прочее..
Согласен, что решение может быть не особо изящным - повторю, я не спец в каком-либо программировании - но это решение вполне себе рабочее. Почему нет? Тем более, что сходу найти РВ в mssql не получилось.