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

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

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

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

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

25
задан Jeroen 17 July 2015 в 08:14
поделиться

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

Ссылки:

Regex Support

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

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

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

.
21
ответ дан 28 November 2019 в 18:29
поделиться

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

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

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

6
ответ дан 28 November 2019 в 18:29
поделиться

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

необходимо использовать запрос вида:

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

или

select * from mytable where msisdn like '56655%'
0
ответ дан 28 November 2019 в 18:29
поделиться

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

--each [0-9] matches a single digit, this would match 5xx
SELECT * FROM YourTable WHERE SomeField LIKE '5[0-9][0-9]'
31
ответ дан 28 November 2019 в 18:29
поделиться
Другие вопросы по тегам:

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