SQLで質問です。

顧客テーブルに姓と名のフィールドがあります。
id sei mei
1 田中 直樹
2 田中 直次
3 田中 英博
「田中直」と入力するとあいまい検索で
1 田中 直樹
2 田中 直次
を抽出したいのですが、SQL文はどうなりますか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/03/17 17:22:56
  • 終了:2006/03/17 19:33:44

ベストアンサー

id:birdie-brain No.4

birdie-brain回答回数40ベストアンサー獲得回数42006/03/17 17:42:40

ポイント60pt

DBによって若干違ってくると思いますが、例えばMySQLの場合だと、以下のようになるでしょうか。

SELECT * FROM 顧客テーブル

WHERE

  CONCAT(sei,mei) LIKE CONCAT('田中直','%');

sei列とmei列を連結したものと、入力途中の文字列にワイルドカード'%'を連結したものを、LIKE演算子で比較しています。

id:rizo

すばらしい!できました。

CONCATですね!

2006/03/17 19:28:34

その他の回答(4件)

id:azrite No.1

azrite回答回数128ベストアンサー獲得回数12006/03/17 17:32:13

ポイント3pt

like句を使ってはどうでしょう。

具体的には条件で

like "田中直"

を入れると検索できると思います。

http://q.hatena.ne.jp/1142583773#answer_form

id:rizo

SQL文を具体的にお教えいただければ・・・ありがたいのですが。

2006/03/17 19:10:50
id:meshy No.2

meshy回答回数24ベストアンサー獲得回数02006/03/17 17:34:04

ポイント3pt

呼び出し側のアプリで姓と名で区切ってから

select 顧客テーブル

from 書籍台帳

where 姓 like '田中%'AND 名 like '直'

ってのはだめなんでしょうか?

http://www.yc.musashi-tech.ac.jp/~yamada/doc/mysql/win/0611....

id:rizo

姓と名を分ける作業を行うのはちょっと大変ですね。

2006/03/17 19:11:18
id:iwaim No.3

iwaim回答回数215ベストアンサー獲得回数192006/03/17 17:34:37

ポイント3pt

SELECT id FROM 顧客テーブル WHERE sei='田中' AND mei LIKE '直%';

「田中直」を「田中」と「直」に別けるのは事前に処理するしかないでしょうね。sei が必ず 2文字と決まっているなら SQL でなんとかなるでしょうけど、決まっているわけはないと思いますので。

http://www.atmarkit.co.jp/fnetwork/rensai/sql01/sql1.html

id:rizo

上記と同じく姓と名を分けるのは大変そうです

2006/03/17 19:13:56
id:birdie-brain No.4

birdie-brain回答回数40ベストアンサー獲得回数42006/03/17 17:42:40ここでベストアンサー

ポイント60pt

DBによって若干違ってくると思いますが、例えばMySQLの場合だと、以下のようになるでしょうか。

SELECT * FROM 顧客テーブル

WHERE

  CONCAT(sei,mei) LIKE CONCAT('田中直','%');

sei列とmei列を連結したものと、入力途中の文字列にワイルドカード'%'を連結したものを、LIKE演算子で比較しています。

id:rizo

すばらしい!できました。

CONCATですね!

2006/03/17 19:28:34
id:inokuni No.5

いのくに回答回数1343ベストアンサー獲得回数212006/03/17 17:54:03

ポイント40pt

SELECT * FROM id, sei, mei WHERE CONCAT(sei, mei) LIKE '田中直%';

http://dev.mysql.com/doc/refman/4.1/ja/string-functions.html

id:rizo

こちらもCONCAT、知っている人は知っているんですね。知識が増えました。ありがとうございます。

2006/03/17 19:29:18
  • id:mitszo
    ORACLE なら、
    select * from 顧客テーブル where sei||mei like '田中直%';
    でできると思います。
    ただ、件数があまり多い場合は文字列連結演算がなされてからの抽出になるのではないかと思うので性能面ではよくないかもしれません。

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません