web-dev-qa-db-ja.com

SQL Server内の正規表現

データベースに5XXXXXXのような値を保存しました。Xは任意の数字です。つまり、5349878のような着信SQLクエリ文字列を照合する必要があります。

誰もそれを行う方法を知っていますか?

たとえばXXXX7XXのようなさまざまなケースがあるので、一般的なものにする必要があります。 SQL Server内で別の方法でパターンを表すことは気にしません。

.NETでC#を使用しています。

25
Jack

dBに保存される値は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+は正規表現をサポートしていますが、キャッチできるのは、能力を得る前にCLRでUDF関数を作成する必要があることです。 Googleで検索した場合、サンプルコードを提供する記事が多数あります。それを設定したら、次を使用できます。

  • 5\d{6}最初の例
  • \d{4}7\d{2} 2番目の例

正規表現の詳細については、 このWebサイト を強くお勧めします。

21
OMG Ponies

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
dan

これを試して

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

もちろん、サブストリング値を調整する必要がありますが、残りは機能するはずです...

6
Sparky

数字を照合するには、[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]。郵便番号についてはこれを何度も行います。

1
Robert

この目的にはSQLワイルドカードで十分です。このリンクに従ってください: http://www.w3schools.com/SQL/sql_wildcards.asp

次のようなクエリを使用する必要があります。

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

または

select * from mytable where msisdn like '56655%'
0
JCasso