質問

私は、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()関数をチェックしてください。それは少し限られたのですが、それはあなたが探しているものを行う必要があります。

scroll top