2016-11-28 5 views
0

質問票で個人が無効な回答を入力したケースを見つける必要があります。有効な応答のリストは、「starfish; bass; cod; dolphin; shark;」のようにセミコロンで区切られた文字列としてテーブルに保存されます。SELECT ...クエリ生成リストの値を見つけられない場合

私はテキスト値に対してクエリを実行する場合、私は値を分離していないので、それは、「ヒトデ」はリストにないことを私に教えてくれますが:

SELECT 'starfish' as value, 'starfish;bass;cod;dolphin;shark;' as 'is not in this list' 
WHERE 'starfish' NOT IN ('starfish;bass;cod;dolphin;shark;') 

私はて行くことができます私はセミコロンリストを引用符とカンマリストに変換するかなり手作業のプロセスです。私は、それが動作することを行うと:

SELECT 'starfish' as value, 'starfish'',''bass'',''cod'',''dolphin'',''shark' as 'is not in this list' 
WHERE 'starfish' NOT IN ('starfish','bass','cod','dolphin','shark') 

を私の問題はどこにあるのか、ここにあります: 私は私のクエリはアポストロフィ/カンマ区切りのリストにセミコロン文字列を変換することによって、いくつかのステップを保存したいと思います。しかし、私がそれをすると、SQLは自分の値がリストにないかのように動作します。

SELECT 'starfish' as value, (''''+REPLACE(LEFT(RTRIM('starfish;bass;cod;dolphin;shark;'),LEN(RTRIM('starfish;bass;cod;dolphin;shark;'))-1),';',''',''')+'''') as 'is not in this list' 
WHERE 'starfish' not in (''''+REPLACE(LEFT(RTRIM('starfish;bass;cod;dolphin;shark;'),LEN(RTRIM('starfish;bass;cod;dolphin;shark;'))-1),';',''',''')+'''') 

SQLのリストとして有効な値の私のクエリが生成したリストを認識しないことが表示されます。修正する方法はありますか?

+0

あなたの問題は引用自体です。 「ヒトデ」は「ヒトデ」でなければなりません。 (編集:コメントの中で一重引用符が消えます。文字はキーボードの左上にある文字でなければなりません) – durbnpoisn

+1

値を文字列として保存することで、あなた自身が苦労しています。答えを行に分ければ、検索は簡単な 'SELECT ... WHERE ...'または 'EXISTS ...'文になります。ストリングを行に分割するためのSOには、多くの回答があります。 http://stackoverflow.com/questions/13873701/convert-comma-separated-column-value-to-rows – Tony

+0

どのDBMSを使用していますか? –

答えて

0

LIKE演算子とワイルドカードを使用できます。

select * from 
(
SELECT 'starfish' as value, 'starfish;bass;cod;dolphin;shark;' as notlist from dual 
) 
WHERE ';'|| notlist not like '%;'||value||';%'; 
関連する問題