Mysqlのクエリで値「hogehoge」を用いて下記の対象をすべてマッチさせるクエリを知りたいです。

・「hoge hoge」
・「hoge hoge」
・「hoge hoge hoge」


下記のようなクエリを考えたのですが全角スペースと半角スペースが入っている対象にマッチできませんでした。
SELECT * FROM `table` WHERE
replace(`column`, ' ', '') = 'hogehoge' AND
replace(`column`, ' ', '') = 'hogehoge';

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/04/01 10:49:32
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント50pt

SELECT * FROM `table` WHERE

replace(replace(`column`, ' ', '') , ' ', '') = 'hogehoge';

このように 半角空白を除いたものから 全角空白を除いて、一致するかしてみたらいかがでしょうか?

id:php-beginner

replaceの中にreplaceって出来るんですね!

うまくマッチできました!

ありがとうございました。

2010/04/01 10:43:52

その他の回答1件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198ここでベストアンサー

ポイント50pt

SELECT * FROM `table` WHERE

replace(replace(`column`, ' ', '') , ' ', '') = 'hogehoge';

このように 半角空白を除いたものから 全角空白を除いて、一致するかしてみたらいかがでしょうか?

id:php-beginner

replaceの中にreplaceって出来るんですね!

うまくマッチできました!

ありがとうございました。

2010/04/01 10:43:52
id:GreenStar No.2

回答回数192ベストアンサー獲得回数46

ポイント20pt

ANDをORに変えればいいというような手抜き回答がきてそうな気がする~~~w


正規表現使ったほうがいいでしょうね。

CREATE TEMPORARY TABLE test(`column` TEXT);
INSERT INTO test VALUES ('hoge hoge'),('hoge hoge'),('hoge hoge hoge'),('fugo fugo'),('fugo fugo'),('fugo fugo fugo');
SELECT * FROM test WHERE `column` regexp '.*hoge( | )hoge.*';

http://dev.mysql.com/doc/refman/4.1/ja/regexp.html

http://dev.mysql.com/doc/refman/5.1/ja/regexp.html

id:php-beginner

今回どこでスペースが入るか予測出来ないんですよ。

一文字区切りでやれば良いのですがシンプルではないので悩んでいました。

2010/04/01 10:47:40
  • id:GreenStar
    = 'hogehoge'; だと「hoge hoge hoge」は対象外になるけどいいの?
    対象外でよければ AND を OR に変えるほうが軽くなっていいと思うけど?
  • id:php-beginner
    あっ質問を間違えてました・・・。
    最後の対象「hoge hoge 」でhoge一つ余分でした。
    申し訳ないです。

    今回、結果的には問題ナシでした。
  • id:GreenStar
    なるほどね。それなら入れ子にするよりANDをORに変えるだけのほうがいいよ。
    入れ子だと無条件に2回replaceが実行されちゃうけどORだと最初に行ったほうがFALSEだと、もう一方は処理されずに次のレコードの処理に入るから全体としての処理は軽くなるよ。
  • id:php-beginner
    スイマセン・・・。
    そこも質問間違えてました・・・orz
    実際はORで試していました。

    半角だけ、全角だけならマッチするのですが両方が入っているとマッチできませんでした。
  • id:GreenStar
    なるほどね。その2。
    そこまでは読みきれなかったです。まっすぐお馬鹿な回答でした。ごめんなさい。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません