2016-07-21 7 views
1

SQLが期待どおりに動作しません。そして、それは同じような節の一つのためだと分かった。私は、次のSQLなぜ ""%、2、% "は" 1,2,3、 "`のようにゼロを返しますか?

select * from SomeTable Where "%,2,%" like ",1,2,3,"; 

を期待

select * from SomeTable; 

と同じ結果を与えるが、それは実際には何も与えません。 ",1,2,3,"を展開できません。memsqlを使用しているため、find_in_setを使用することはできません。 エントリがカンマで区切られたリスト文字列であるかどうかを判断するために他の方法がありますか、何か間違っていましたか?

+2

私は、あなたが本当に探していることだと思いますあなたは? &のようなものでなければなりません: 'select * from SomeTable Where"、1,2,3、 "like"%、2、% "; ' –

+1

'% '文字を含む一致パターンは' LIKE'の後に来て、比較する値は前になります。 – EJP

+0

MemSQLでこれを行う最善の方法は、JSON経由です。 json_array_contains_double(CONCAT( '['、column_with_list_of_ids、 ']')、2)FIND_IN_SET(2、column_with_list_of_ids)と同じ動作を得るために:あなたのデータはJSONとしてフォーマットされていない場合でも、あなたのような何かを行うことができます。 –

答えて

3

私はあなたが実際にいつもTRUEと評価され、 "%、2%" のように "1,2,3、" ので

select * from SomeTable Where ",1,2,3," LIKE "%,2,%" ; 

SELECT * SomeTable.と同じ結果が得られることを意味だと思います。上記のステートメントは常に "1,2,3、" のような次のステートメント

select * from SomeTable Where "%,2,%" like ",1,2,3,"; 

"%、2%" の一方確か成分

select * from SomeTable; 

と同じですFalseに評価されます。これにより結果はゼロになります。 `;あなたは " 1,2,3、" のような "%、2%、" SomeTableからどこに選択*`を意味するものではありませんでした

select * from v Where somecolumn like "%,2,%" 
+0

"%、2、%" "1,2,3、" === falseのように。 – SIDU

+1

"、1,2,3、" like "%、2、%" === true – SIDU

+0

はい@SIDU、私は質問の言葉で自分自身を混乱させました。変更されました – e4c5

関連する問題