web-dev-qa-db-ja.com

SQL Server、LIKEステートメントで%ワイルドカードと[]ワイルドカードを組み合わせる

T-sqlで、特定のセット内の1つ以上の文字を検索できるように、likeステートメントでパターンマッチングを実行する方法はありますか?

具体的には、1つ以上の文字で始まり、1つ以上の数字で終わる文字列を返すLIKEステートメントを考え出そうとしています。

したがって、これらの文字列は一致する必要があります。

  • abcd1234
  • a1
  • abcdef2
  • ab123456

そして、これらの文字列は一致してはなりません:

  • あいうえお
  • 1234
  • abcd1234abcd
  • 1abcd1

%ワイルドカードを使用して0文字以上の文字列に一致させることができ、brackets []を使用して特定のセット内の1文字に一致させることができます。しかし、それらを組み合わせて、特定のセットの1つ以上の文字に一致させる方法はありますか?

このようなものは素晴らしいでしょうが、もちろん機能しません:

WHERE ColumnName LIKE '[%a-z][%0-9]'

誰かがこの問題の解決策を知っていますか?それとも、SQL Serverでは不可能ですか?

ありがとう、ジム

7
Jim

パターンマッチングが非常に制限されているように、通常の正規表現は使用できません。

詳細については、 ここ を参照してください。

あなたのニーズに使用してください:

WHERE ColumnName LIKE '[a-z]%[0-9]'

これは、任意の文字、その後に何か、その後に数字が続くものと一致します。 SQLは、[]マッチセットの前後にパターンまたはリテラル文字がないため、文字と数字が文字列の両端にあることを強制します。

8
Jeffrey Wieder

Regexを使用してアクセス許可を取得する場合は、ユーザー定義関数を記述して、SQLサーバーの.NETCLR上の正規表現パーサーにアクセスできるようにすることができます。

http://msdn.Microsoft.com/en-us/magazine/cc163473.aspx (SQL 2005以降)

1
Charles D.