web-dev-qa-db-ja.com

SQLのLIKE演算子で式を1回以上一致させる演算子または簡単な方法はありますか?

たとえば、次のクエリを実行すると、WHERE句の式は数字の前の最初の文字のみと一致しますが、1つ以上の文字を最初に一致させる方法があります(たとえば、文字の数が可変の場合)私がフィルタリングしているフィールドの数の前に)?

SELECT FilteredField
FROM Table
WHERE FilteredField LIKE '[a-zA-Z][0-9]'

データの例:

  1. ABC9
  2. DEF2
  3. GH7
  4. Z1
  5. XYH2

基本的に、LIKE演算子を使用する場合は、SQL Server 2016でRegEx +に相当するものを探しています。

4
J.D.

これを純粋にTransact-SQLで解決することを話している場合は、次のフィルターを使用して、サンプルデータのこれらのケースをすべてカバーできます。

WHERE FilteredField LIKE '%[a-zA-Z][0-9]'

数字の前のすべての文字がラテン文字でなければならないことをさらに規定したい場合は、少し工夫する必要があります:

WHERE FilteredField     LIKE           '%[a-zA-Z][0-9]'
  AND FilteredField NOT LIKE '%[^a-zA-Z]%[a-zA-Z][0-9]'

基本的に、あなたは言っています:

値は文字と数字で終わる必要がありますが、文字の前にあるものはすべて非文字であってはなりません。

組み込み構文のみを使用して、これを単一の条件で指定する方法はありません。

12
Andriy M

Mustaccioのコメントで述べたように:

LIKEをハックしようとせずに、正規表現の適切な実装を使用できない原因はありますか?

CLR(共通言語ランタイム)を使用するオプションがあります。基本的にはいくつかのC#関数を作成し、それをSQLサーバーにインポートします。そこからSQL関数を呼び出すだけで、C#コードが実行されます。

これにより、SSMSから直接、.NETの正規表現で可能なすべての可能性が自然に得られます。

これに対処する方法については、さまざまなリソースがたくさんあります。
Red gate regex Assembly
コードプロジェクトの例

3
Yannick Liekens