Я сохранил значения в своей базе данных, которые выглядят как 5XXXXXX
, где X
может быть любой цифрой. Другими словами, мне нужно сопоставить входящие строки запроса SQL, например 5349878
.
У кого-нибудь есть идеи, как это сделать?
У меня есть разные случаи, например, XXXX7XX
, поэтому он должен быть универсальным. Меня не волнует представление шаблона в SQL Server другим способом.
Я работаю с c # в .NET.
хранимое в БД значение составляет: 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+ поддерживает regex, но подвох в том, что вам нужно создать UDF-функцию в CLR, прежде чем вы получите такую возможность. Существует множество статей с примерами кода, если вы их погуглите. После того, как это будет сделано, вы можете использовать:
5\d{6}
для первого примера\d{4}7\d{2}
для второго примераДля получения более подробной информации о регулярных выражениях, я настоятельно рекомендую этот сайт.
.Попробуйте это
select * from mytable
where p1 not like '%[^0-9]%' and substring(p1,1,1)='5'
Конечно, вам нужно будет настроить значение подстроки, но все остальное должно работать...
SQL Wildcards достаточно для этой цели. Перейдите по этой ссылке: http://www.w3schools.com/SQL/sql_wildcards.asp
необходимо использовать запрос вида:
select * from mytable where msisdn like '%7%'
или
select * from mytable where msisdn like '56655%'
В SQL Server можно писать такие запросы:
--each [0-9] matches a single digit, this would match 5xx
SELECT * FROM YourTable WHERE SomeField LIKE '5[0-9][0-9]'