日ごろからバリバリ SQL を書かれている方はこのエントリーを読まずあっちへ行ってください(笑)
マスタの検索画面で、空白で区切られた文字列で複数キーワード検索・・・という要件があって、(他人が作ったプログラムじゃけど)仕様変更の対応とかでソース触ってたら、その複数キーワード検索のプログラムが、
という SQL を吐くように直しましたとさ・・・という話(笑)
Tweet
マスタの検索画面で、空白で区切られた文字列で複数キーワード検索・・・という要件があって、(他人が作ったプログラムじゃけど)仕様変更の対応とかでソース触ってたら、その複数キーワード検索のプログラムが、
商品名 LIKE '%カレー%うどん%'
みたいな SQL を吐くのよ。
俺は日ごろそんなに SQL を触りまくってるわけではないので、
なんて感動しちゃったのよね。
いや、違う(笑)
これだと「カレーうどん 2食入り」とか「大盛カツカレーうどん」はヒットするけど、「うどん屋さんのスープカレー」はヒットせんやん!
よく考えたら、% は単なる LIKE 検索時のワイルドカード文字やん!!(^^;
正規表現で /.*?カレー.*?うどん.*?/ って書いてるのと一緒やあ。
日ごろ、'ほげ%'(前方一致)、'%ほげ'(後方一致)、'%ほげ%'(部分一致)みたいにひとつの組み合わせだけで使うことが多いから、文言の中にいくつも % が含まれてたら、ついつい「お、なんかすごいことっやってる!?」って幻惑されるわ(^^;
そしてこれはもちろんバグだったので、
俺は日ごろそんなに SQL を触りまくってるわけではないので、
「おお!こう書くと、
商品名 LIKE '%カレー%' AND 商品名 LIKE '%うどん%'
と同じ動きをするのか!!」
なんて感動しちゃったのよね。
いや、違う(笑)
これだと「カレーうどん 2食入り」とか「大盛カツカレーうどん」はヒットするけど、「うどん屋さんのスープカレー」はヒットせんやん!
よく考えたら、% は単なる LIKE 検索時のワイルドカード文字やん!!(^^;
正規表現で /.*?カレー.*?うどん.*?/ って書いてるのと一緒やあ。
日ごろ、'ほげ%'(前方一致)、'%ほげ'(後方一致)、'%ほげ%'(部分一致)みたいにひとつの組み合わせだけで使うことが多いから、文言の中にいくつも % が含まれてたら、ついつい「お、なんかすごいことっやってる!?」って幻惑されるわ(^^;
そしてこれはもちろんバグだったので、
商品名 LIKE '%カレー%' AND 商品名 LIKE '%うどん%'
という SQL を吐くように直しましたとさ・・・という話(笑)
コメントする