2016-06-21 4 views
-4

@Variantが提供されているコードを書いています。私はそれらを変数(ランタイム)に取り込んで複数の値を格納し、それらをWHERE節に渡したいと思っていました。SQLのLIKEワイルドカード

DECLARE @Variant VARCHAR(50) 
SET @Variant='''25'',''33''' 
SELECT @Variant ---- which is actually '25','33' 
SELECT 'TRUE' WHERE '25' IN (@Variant) 

DECLARE @Variant VARCHAR(50) 
SET @Variant='''25'',''33''' 
SELECT @Variant ---- which is actually '25','33' 
SELECT 'TRUE' WHERE '25' IN (SELECT @Variant) 

上記のクエリが動作しないロジック...

--DECLARE @Variant VARCHAR(50) 
--SET @Variant='''25'',''33''' 
--SELECT @Variant 
SELECT 'TRUE' WHERE '25' IN ('25','33') 

上記のSQLを受け入れた場合、私が試した-which SQL Serverでの単純クエリがあるを共有します。私の実際のクエリは、WHERE句のLIKE文にワイルドカードを渡すことです。

DECLARE @Variant VARCHAR(50) SET @Variant = '' 'は25%」OR [Item_No] ''33%' LIKE '[Item_No] LIKE表1から' SELECT @Variant
SELECT * (@Variant) - @variableは実行中にその値に置き換えられます。

とにかく簡単な方法 - Where句に複数のワイルドカードを指定したいItem_Noがあります。インライン関数に似たメソッドがあります。これは@variantのテキストを置き換えて、それを組み合わせて実行する必要があります。

+4

使用するdbmsにタグを付けます。 (そのコードはANSI SQLのようには見えません...) – jarlh

+0

これは 'LIKE'やワイルドカードとは関係ありません。タグを修正してください。 – Pred

+0

なぜ「ワイルドカード」と「好き」のタグを付けましたか? – kostas

答えて

2
DECLARE @Variant VARCHAR(50) 
SET @Variant='''25'',''33''' 

この時点@Variantで、単一の文字列が含まれています。 25'25','33'等しい、これが一致するつもりはありませんしません考えると

SELECT 'TRUE' WHERE '25' IN (@Variant) 

。 (INは、括弧で指定された値のセットのうちの少なくとも1つと完全一致一致を探しています)。

SQLは文字列をコレクションに魔法のように解析しません。あなたはそれを伝える必要があります。これを行うためのオプションは、使用している特定のDBMSによって異なります。一時テーブルとテーブル値の変数が含まれています。

+0

リチャードに感謝 - あなたの説明 "25が '25'と等しくないとすれば、 '33'これは決して一致しないだろう" – Ravi

0

SQLLike条件はあなたのscenerioで動作します。

DECLARE @Variant VARCHAR(50) 
SET @Variant='''25'',''33''' 

SELECT 'TRUE' WHERE @Variant like '%25%' 

ここで結果はTRUEです。これが役立つことを願っています。

+1

そして '@Variant = '25,33,255,256 ' – sagi