• ベストアンサー

SQLで抜き出した日本語データの表示ができません。

初めまして。SQLを勉強し始めたばかりの初心者です。 掲題の件について、例を交えて詳細を記載させていただきます。 例えば、住所録テーブルから名前と電話番号を抜き出し、指定した「姓」のデータのみを抽出する場合です。 (以下、テキストを参考にSQL文を記載させていただきます。 select kokyakuID, kokyakuname, tel from addresssample where left(kokyakuname, locate(' ', kokyakuname) - 1) in ('戸川', '小笠', '上松') order by kokyakuID; この構文で実行しても、エラーはでませんが何も表示されません。 ちなみに、以下の構文で行うとしっかりデータを抽出して表示してくれます。 select kokyakuID, kokyakuname, tel from addresssample where kokyakuname like '戸川 %' order by kokyakuID; どこか構文でおかしいところがあるのでしょうか? テキストを読み直したけどわかりませんので、どうかご協力をお願いいたします。 ちなみに環境を記載しておきます。 ・サーバ 「MySQL Server 5.2.3」 ・クライアント 「かねやんMySQL ver1.43」 以上、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

kokyakunameの値で、'戸川'の後ろに全角の空白が入っています。 したがって、「where kokyakuname like '戸川 %'」では、全角空白を含めての検索のためヒットしています。 一方、「where left(kokyakuname, locate(' ', kokyakuname) - 1) in ('戸川', '小笠', '上松')」では、locate関数中に指定されている空白は、半角になっています。 これを全角空白にすれば、検索できます。

Conitan
質問者

お礼

初めまして。 レス遅くなりまして申し訳ありません。 先ほど抽出データを確認しました。 ご指摘のとおり、よくみたら''の部分が半角スペースになっていました。自分では全角のつもりだったのですが・・・。 おかげさまですっきり解決できました。ありがとうございました! 今後もいろいろ難題と出向かうことがあると思いますが、ご協力をよろしくお願いします!

その他の回答 (2)

  • ikiss
  • ベストアンサー率43% (34/79)
回答No.2

ごめんなさい。 よく見てみると入ってますね。 ちょっと環境がないので何ともいえないのですが、 select kokyakuID, kokyakuname,left(kokyakuname, locate(' ', kokyakuname) - 1) ,tel from addresssample order by kokyakuID; と書いてみて、どういうデータが出ているのか確認すれば 解決の糸口になると思います。

  • ikiss
  • ベストアンサー率43% (34/79)
回答No.1

locate('' ←この部分 半角スペースをいれないと駄目なんじゃないかな? この構文をみる限りいれてませんよね? 姓と名の間が全角スペースなら、全角スペースを いれてみてください。

Conitan
質問者

お礼

初めまして。 連絡遅くなりまして申し訳ありません。 テーブルで全角スペースを使用していたので、同じく全角スペースを利用していたつもりですが、先ほど良くみたら半角だということに気づきました。 アドバイスのおかげです。ありがとうございました! 今後も何かとご質問させていただくこともあるかと思いますが、どうぞよろしくお願いします。

関連するQ&A