Регулярные выражения внутри SQL Server

Я сохранил значения в моей базе данных, которые выглядят как 5XXXXXX, где X может быть любой цифрой. Другими словами, мне нужно сопоставить входящие строки SQL-запросов, например 5349878.

Есть ли у кого-нибудь идея, как это сделать?

У меня разные случаи, например, XXXX7XX, поэтому он должен быть общим. Я не забочусь о представлении шаблона по-другому внутри SQL Server.

Я работаю с С# в .NET.

4 ответа

сохраненное значение в БД: 5XXXXXX [где x может быть любой цифрой]

Вы не указываете типы данных - если числовое значение, вам, вероятно, придется использовать CAST/CONVERT, чтобы изменить тип данных на [n] varchar.

Использование:

WHERE CHARINDEX(column, '5') = 1
 AND CHARINDEX(column, '.') = 0 --to stop decimals if needed
 AND ISNUMERIC(column) = 1

Литература:

У меня также есть разные случаи, например, XXXX7XX, поэтому он должен быть общим.

Использование:

WHERE PATINDEX('%7%', column) = 5
 AND CHARINDEX(column, '.') = 0 --to stop decimals if needed
 AND ISNUMERIC(column) = 1

Литература:

Поддержка регулярных выражений

SQL Server 2000+ поддерживает регулярное выражение, но вы должны создать функцию UDF в среде CLR, прежде чем сможете. Существуют многочисленные статьи, содержащие пример кода, если вы их Google. После этого вы можете использовать:

  • 5\d{6} для вашего первого примера
  • \d{4}7\d{2} для вашего второго примера

Для получения дополнительной информации о регулярных выражениях я настоятельно рекомендую этот сайт.


Вы можете писать такие запросы в SQL Server:

--each [0-9] matches a single digit, this would match 5xx
SELECT * FROM YourTable WHERE SomeField LIKE '5[0-9][0-9]'


Попробуйте это

select * from mytable
where p1 not like '%[^0-9]%' and substring(p1,1,1)='5'

Конечно, вам нужно будет отрегулировать значение подстроки, но остальное должно работать...


SQL-подстановок достаточно для этой цели. Перейдите по этой ссылке: http://www.w3schools.com/SQL/sql_wildcards.asp

вам нужно использовать такой запрос:

select * from mytable where msisdn like '%7%'

или

select * from mytable where msisdn like '56655%'

licensed under cc by-sa 3.0 with attribution.