2009-03-13 13 views
1

数字の文字列 (つまり '1,2,3,4,5')を含むmysqlテーブルをクエリしようとしています。数字文字列にワイルドカードを使用したMysqlクエリ

「9,10」の場合、「1」が「11」でないことを覚えておくにはどうすればよいですか?

修正済み!

(field like '10' OR field like '%,10,%' OR field like '%,10' OR field like '10,%') 
+0

ない正確な答えが、ポッドキャスト#44でジョエルとジェフは、それはあなたがSQL内で正規表現を使用できないことを奇妙な理由について話しています。 RegExpはこの問題を解決するのに役立ちます。 – Roalt

答えて

1

機能FIND_IN_SETが必要です。ところで、「9%」は動作するはずの列が指定した値が含まれている場合、あなたは

SELECT * FROM table WHERE field LIKE '9%'? 
+0

'9%'は間違いなくCLIに直接接続しようとしましたが、Sunサイトでは数字がワイルドカードで正常に動作しないと言われています。9%は9,900ではなく9,10を受け取ります。 – sydlawrence

+0

ああ、 used = – sydlawrence

+0

私はmysqlバージョン5.0.70を実行していて、試してみました。列のタイプは何ですか? – soulmerge

2

を照会しているあなたは確かであるあなたは、標準SQLはそれを行うことができます

select find_in_set('1','1,2,3,11,12') 
+0

それは素晴らしいです、私はその機能について知りませんでした。 –

0

機能FIND_IN_SETを試みることができます

この式ではインデックスを使用できないため、テーブルサイズが大きくなるとパフォーマンスが急速に低下します。

パフォーマンスを向上させるには、表を適切に正規化する必要があります。

SetId SetValue 
    1 1 
    1 2 
    1 3 
    1 4 
    1 5 

代わりの

SetId SetValue 
    1 '1,2,3,4,5' 
関連する問題