Существует ли хороший способ преобразовать Регулярное выражение в ПОДОБНЫЙ в Функции (MSSQL)? sproc не становится более сложным, чем это:
(country\=)(?<Country>[\w\d]+)(\&sessionid\=)(?<SessionId>.+)
Группы не будут использоваться в ПОДОБНОМ, они там для другой цели.
Я хотел бы использовать эту внутреннюю часть sproc поздно как:
SELECT * FROM [Table]
WHERE test_regex(regex, 'text') = 1
Где regex является частью [Таблицы]
Можно добавить синтаксический анализ регулярных выражений на сервер SQL с помощью функции CLR. Это возможно с SQL 2005 и выше. См. Отличный пример здесь .
Проверьте эту функцию sql. Это может помочь вам в достижении вашей задачи: PATINDEX ('% [^ 0-9 \.]%', @ Input)
Думаю,
SELECT ...
FROM [Table]
WHERE col LIKE 'country=[A-Za-z0-9]%&sessionid=[A-Za-z0-9]%'
может быть достаточно близко? Если цель состоит в том, чтобы просто вернуть записи с непустыми значениями страны и сеанса.
Если значение в столбце не обязательно должно начинаться с "страны", вам нужно будет использовать WHERE col LIKE '% country = [A-Za-z0-9]% & sessionid = [A-Za -z0-9]% '
, что может значительно замедлить работу согласно ответу KM.
, который будет работать очень медленно в большой таблице, анализируя строковый столбец в каждой строке.
если вы можете изменить таблицу, может быть лучше разделить этот строковый столбец на разные столбцы, чтобы вы могли использовать более традиционный WHERE country = ... AND sessionid = ...
, вы можно даже добавить и использовать индекс таким образом.
Не из коробки. Наиболее близким к поиску по регулярным выражениям в SQL Server является PATINDEX (), но он не выполняет регулярные выражения.
Если вы действительно этого хотите, вам придется вместо этого создать функцию CLR для запуска регулярного выражения. Возможно, вас беспокоит скорость, но я бы сказал, что почти ничего, что вы бы не сделали, что касается регулярных выражений или шаблонов, все равно можно использовать индекс.
Используйте функцию RegEx в SQL # , которая является бесплатной. У меня не было проблем с производительностью при таком подходе.