![]() |
Модераторы: Akina |
![]() ![]() ![]() |
|
skyboy |
|
||||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 2 Всего: 260 |
Понадобились мне регулярные выражения. После оператора REGEXP в mysql, ожидал нечто подобное и в таком монстре, как MSSQL Server. А оказалось - нету такого. В поисках downloadable UDF-библиотеки наткнулся на статью на sqlteam.com, где описано создание функции для работы с регулярными выражениями при помощи использования объекта VBScript.Regexp. Ну, да, я забыл, что T-SQL может ссылаться не только на библиотеки dll, но и на ActiveX-объекты. Все же, кроссплатформенность даже не предполагается.
Таким образом, функция выглядить следующим образом:
А использовать её можно так:
Подробнее об особенностях VBScript.RegExp лучше почитать заранее, чтоб не попасть впросак - некоторые отличия от других(к примеру, POSIX) реализаций имеются. |
||||
|
|||||
setnull |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 3.7.2007 Репутация: нет Всего: 1 |
А можно уточнить?
Если поле myField проиндексировано, данный запрос воспользуется этим индексом? |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 2 Всего: 260 |
||||
|
||||
setnull |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 3.7.2007 Репутация: нет Всего: 1 |
Так если рассматривать не структуру индекса, а алгоритм поиска....
Из страницы индексов отобрать строки, что удовлетворяют регэкспу, а затем вытянуть соответствующие им записи таблицы... |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 2 Всего: 260 |
так как регулярные выражения - очень гибкий механизм, то подобная страница индексов строилась бы по совпадению/несовпадению с регулярным выражением(так как регулярное выражение может быть и "\d\d", и "^\s.*$"). т.о. сначала строились бы индексы, а потом единократно их использовали бы. смысЛ? я лично не вижу. единственный смысл был бы при использовании в секции on для join'ов, чтоб несколько раз не вычислять заново значение для незменного аргумента, но, как я понял, детерминистические функции(вызовы с определнными аргументами) и так кешируются, так что в этом отношении все продуманно. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "MS SQL" | |
|
Запрещается! Публиковать ссылки и обсуждать взлом чего бы то ни было.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MS SQL Server | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |