T-SQLのパターンマッチング
-
23-08-2019 - |
質問
私は、WHERE句のように別のテーブルに「多値」パイプ区切りの列を使用して、データの行を照会する方法を見つけようとしています。 SQL Server 2005の
この問題の私の最高の説明があります:
@LIST =などの変数に設定し、パイプ区切り列想像ボブ|メアリー|ジョー '
そして、私はこのような試合を見つけようとしています。
Select * from Users where FirstName = 'Joe'
が、
であることを拡張Select * from Users where FirstName "IS CONTAINED IN" @List
これは、すべてのボブ、メアリーとジョーのエントリを返します。ご協力いただきありがとうございます。
解決
あなたは、分割されたUDFを使用し、メインクエリに参加することができます。コード例えば、このリンクを参照してください。あなたのクエリは次のように見ていることになります。これはテストされていないですが、うまくいけば、これは正しい方向にあなたを指します。
Select A.* from Users A JOIN dbo.Fn_Split(@ValueArrayString, '|') B on A.FirstName = B.value
他のヒント
どの程度
Select * from Users where CHARINDEX(FirstName + '|', @List + '|') > 0
あなたは両方の文字列にパイプ区切り文字を追加する必要がありますが、それが動作し、それが機能よりおそらく速いということです。 少しうるさいです
私はMrTellyのソリューションが好きです。しかし、それは半分しか偽陽性の世話をしています。 次のように完全なソリューションがあります:
Select * from Users where CHARINDEX('|' + FirstName + '|', '|' + @List + '|') > 0
パイプは、両端に追加する必要がある
PATINDEX()関数をチェックしてください。それは少し限られたのですが、それはあなたが探しているものを行う必要があります。
Select * from Users where FirstName IN (Select Item From udf_Txt_SplitTAB (@LIST, '|'))
所属していません StackOverflow