Sql нравится к RegEx

Существует ли хороший способ преобразовать Регулярное выражение в ПОДОБНЫЙ в Функции (MSSQL)? sproc не становится более сложным, чем это:

(country\=)(?<Country>[\w\d]+)(\&sessionid\=)(?<SessionId>.+)

Группы не будут использоваться в ПОДОБНОМ, они там для другой цели.

Я хотел бы использовать эту внутреннюю часть sproc поздно как:

SELECT * FROM [Table]
WHERE test_regex(regex, 'text') = 1

Где regex является частью [Таблицы]

8
задан Aldwoni 13 March 2018 в 16:33
поделиться

6 ответов

Можно добавить синтаксический анализ регулярных выражений на сервер SQL с помощью функции CLR. Это возможно с SQL 2005 и выше. См. Отличный пример здесь .

4
ответ дан 5 December 2019 в 10:39
поделиться

Проверьте эту функцию sql. Это может помочь вам в достижении вашей задачи: PATINDEX ('% [^ 0-9 \.]%', @ Input)

PATINDEX (Transact-SQL)

3
ответ дан 5 December 2019 в 10:39
поделиться

Думаю,

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.

4
ответ дан 5 December 2019 в 10:39
поделиться

, который будет работать очень медленно в большой таблице, анализируя строковый столбец в каждой строке.

если вы можете изменить таблицу, может быть лучше разделить этот строковый столбец на разные столбцы, чтобы вы могли использовать более традиционный WHERE country = ... AND sessionid = ... , вы можно даже добавить и использовать индекс таким образом.

2
ответ дан 5 December 2019 в 10:39
поделиться

Не из коробки. Наиболее близким к поиску по регулярным выражениям в SQL Server является PATINDEX (), но он не выполняет регулярные выражения.

Если вы действительно этого хотите, вам придется вместо этого создать функцию CLR для запуска регулярного выражения. Возможно, вас беспокоит скорость, но я бы сказал, что почти ничего, что вы бы не сделали, что касается регулярных выражений или шаблонов, все равно можно использовать индекс.

1
ответ дан 5 December 2019 в 10:39
поделиться

Используйте функцию RegEx в SQL # , которая является бесплатной. У меня не было проблем с производительностью при таком подходе.

2
ответ дан 5 December 2019 в 10:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: