Регулярные выражения внутри SQL Server - PullRequest
24 голосов
/ 26 декабря 2009

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

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

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

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

Ответы [ 5 ]

31 голосов
/ 26 декабря 2009

Вы можете написать запрос в SQL Server следующим образом:

--each [0-9] matches a single digit, this would match 5xx
SELECT * FROM YourTable WHERE SomeField LIKE '5[0-9][0-9]'
20 голосов
/ 26 декабря 2009

сохраненное значение в БД: 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, прежде чем у вас появится такая возможность. Существует множество статей, содержащих примеры кода, если вы их гуглите. Если у вас есть это, вы можете использовать:

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

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

6 голосов
/ 27 декабря 2009

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

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

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

1 голос
/ 23 апреля 2018

Чтобы соответствовать цифре, вы можете использовать [0-9]. Таким образом, вы можете использовать 5 [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] и [0-9] [0-9] [0-9 ] [0-9] 7 [0-9] [0-9] [0-9]. Я делаю это много для почтовых индексов.

0 голосов
/ 26 декабря 2009

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

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

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

или

select * from mytable where msisdn like '56655%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...