Есть ли способ написать Regex в SQL Запрос к серверу? - PullRequest
1 голос
/ 24 апреля 2020

Я выполняю запрос на сервере SQL. Мне нужно получить записи, где LoginName начинается с заданной строки и заканчивается целыми числами. Я выполняю запрос ниже, но он не возвращает никаких записей. Дайте мне знать, если это невозможно в SQL, поэтому я обработаю код C#.

SELECT * from TestTable where LoginName like 'Input[0-9]*%'

Ожидаемые значения:

Input
Input1
Input123

Не ожидаемые значения:

Inputabc
abc
<empty string>
abcInput

1 Ответ

3 голосов
/ 24 апреля 2020

Есть ли способ написать Regex в SQL Запрос к серверу?

Только с помощью CLR. Нет встроенной поддержки регулярных выражений. LIKE и PATINDEX поддерживают очень ограниченный диалект сопоставления с образцом.

Тем не менее этого достаточно, чтобы получить строки, где LoginName - строка «Ввод», за которой следует любое количество цифр (включая нулевые), а затем конец строки.

Как показано ниже ( DBFiddle link )

SELECT *
FROM   TestTable
WHERE  LoginName LIKE 'Input%'
       AND SUBSTRING(LoginName, LEN('Input') + 1, 8000) NOT LIKE '%[^0-9]%'
  • LoginName LIKE 'Input%' - имя_пользователя начинается с "Input"
  • SUBSTRING(LoginName, LEN('Input') + 1, 8000) NOT LIKE '%[^0-9]%' - подстрока после "Input" не содержит символ, который не находится в диапазоне 0-9

Если вы изменили строку для поиска с Input, не забудьте обновить оба экземпляра в запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...