ストアドプロシージャを使用して、SQL Server 2005で文字列に部分文字列が含まれているかどうかを確認する


245

文字列があります@mainString = 'CATCH ME IF YOU CAN'。単語MEが中にあるかどうかを確認したい@mainString

SQLで文字列に特定の部分文字列があるかどうかを確認するにはどうすればよいですか?

回答:


395

CHARINDEX()は、より大きな文字列内の部分文字列を検索し、一致の位置を返します。一致が見つからない場合は0を返します。

if CHARINDEX('ME',@mainString) > 0
begin
    --do something
end

編集またはdanielsの回答から、単語(単語のサブコンポーネントではなく)を検索する場合、CHARINDEX呼び出しは次のようになります。

CHARINDEX(' ME ',' ' + REPLACE(REPLACE(@mainString,',',' '),'.',' ') + ' ')

(発生する可能性のある他の句読点の再帰的なREPLACE()呼び出しを追加します


2
Okie iはPATINDEXを使用しました。ありがとうございました!
NLV 2010年

1
s / recursive / nested /-「再帰的」は、REPLACEそれ自体が呼び出された場合です。「ネスト」とは、関数呼び出しの結果がすぐに別の関数に渡される場合です。
モニカの訴訟に資金を提供する

2
'ME'はSQLでは大文字と小文字が区別されますか、それとも 'Me'と 'me'のifステートメントを実行する必要がありますか?
a.powell 2017年

5
@ a.powell-関係する照合に依存します。いずれかの方法で必要な場合は、このテスト内でいつでも強制できます。たとえば、比較select CHARINDEX('ME' collate Latin1_General_CS_AS,'Home')select CHARINDEX('ME' collate Latin1_General_CI_AS,'Home')ます。(照合でCSは、Case Sensitiveの略で、きっとうまくいきますCI)。
Damien_The_Unbeliever 2017年

2
@VincePanuccio-T-SQLの文字列処理は悪名高いほど有名です。SQLの強みは、セットベースの操作です。この場合(文字列処理をしたい、そして正規表現が明白な解決策となるようなもの)、それは彼らが仕事のために間違ったツールを選ぶケースです。
Damien_The_Unbeliever 2017

120

述語(IF、WHEREまたはONの後)でワイルドカードを使用できます。

@mainstring LIKE '%' + @substring + '%'

またはこの特定の場合

' ' + @mainstring + ' ' LIKE '% ME[., ]%'

(単語全体を検索する場合は引用符で囲まれた文字列にスペースを入れてください。またはMEがより大きな単語の一部である場合は省略してください)。


3
単語の一致(2番目の例)を探している場合は、a)@mainStringの前後にスペースを追加し(最初または最後の単語を一致させることができます)、b)句読点を削除する
Damien_The_Unbeliever

2
私の場合、権限が制限されているためCHARINDEX()関数を実行できないため、これはCHARINDEX()よりも優れています。
James T Snell 2017年

1
N列がの場合は、すべての文字列定数を前に付けることを忘れないでくださいnvarchar。そうでなければ、行ごとの変換が行われます)
Richard Szalay 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.