• ベストアンサー

SQLのLIKE検索で清音と濁音/半濁音を区別する

VB2008+Accessでアプリケーションを開発しています。 SQLのLIKE検索では、清音と濁音/半濁音、ひらがなとカタカナ等を区別してくれないのですが、これを区別してくれる方法はないでしょうか? 例:(field1はテキスト型フィールド) SELECT * FROM tblA WHERE field1 LIKE '%グラス%' を実行すると、 「クラス」「思いめぐらす」なども検索されてしまいます。 これを、 「サングラス」「グラスワイン」などだけがヒットするようにしたいのです。 ちなみに、MySQLではコチラに回答がありました。 http://oshiete1.goo.ne.jp/qa3918969.html Accessだけが不可能で、SQLServerやOracleならできるかどうかも知りたいです。どうぞ宜しくお願いします。

noname#208329
noname#208329

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

  • ベストアンサー
  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.2

LIKEではないですが、 SELECT Name FROM Table1 WHERE InStr(StrConv(Name,128),StrConv('グラス',128))<>0 で抽出できます。  パフォーマンスについては調べていません。(相当悪いかも)

noname#208329
質問者

お礼

ご回答ありがとうございます。 望んでいた通りの結果を得ることができました。LIKEの代わりにInStrの戻り値を調べるとは感心しました。また、AccessのStrConv関数に128という引数を与えて、文字コードを揃えたうえで比較するところも素晴らしいです。 パフォーマンスですが、試しにAccessにJDBC接続して、SQL Developerで計測してみたところ、普通のLIKE検索と比較して約3倍の時間を要しましたが、今回は結果が大事ですので、我慢したいと思います。 大変救われました。ありがとうございました。

その他の回答 (2)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.3

instr関数とvbBinaryCompareモードの組み合わせで逃げられませんか。

noname#208329
質問者

お礼

ご回答ありがとうございます。 回答番号No.2のShowMeHowさんのご回答とほぼ同じ方法と思いますが、vbBinaryCompareの使い方も調べておこうと思います。ありがとうございました。

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

SQL Serverだけ書いときます。 以下いずれでも。 SELECT * FROM TblA WHERE FIELD1 LIKE '%グラス%' COLLATE JAPANESE_CI_AS_KS_WS SELECT * FROM TblA WHERE FIELD1 LIKE '%グラス%' COLLATE JAPANESE_BIN

noname#208329
質問者

お礼

早速のご回答ありがとうございます。 残念ながら、いずれもAccessでは構文エラーになりました。 Oracleで試してみたところ、なんと、COLLATE・・・ナシで普通にLIKE検索するだけで、きちんと区別してくれました。今回はDBをOracleに変更できませんので、なんとかしてAccessで実現できないものかと悩んでおります。ありがとうございました。

関連するQ&A

  • LIKE で清音と濁音・半濁音を区別する

    LIKEで検索をすると、 清音と濁音・半濁音を区別してくれないのですが、 これをちゃんと区別してくれるようにする方法はありますでしょうか? たとえば、 「ハナナ」「パナナ」と検索しても「バナナ」に一致してしまいます。 これをちゃんと区別するようにしてほしいのです。 ご教授お願いします。

    • ベストアンサー
    • MySQL
  • 外国人にとって清音と濁音について

    私たち日本人は、ひらがなやかたかなの清音に濁点をつける事によって濁音を表しているので無意識に「は」と「ぱ」、「た」と「だ」「さ」と「ざ」が似ていると思っているようです。 こういう事は外国人もそう思っているのでしょうか? 半濁音も含めて興味があります。 こんな質問でもどなたか教えて頂けたら嬉しいです。

  • SQL Serverでの検索時の文字の同一視

    SQL Serverでの検索について教えてください。 【目的】 ・JAVAで作成した検索画面より、SQLServerのテーブルに対して検索をしたい。 ・フリガナ検索で、以下のルールを設けたい  (1)カタカナ小文字(『ッ』『ャ』等)とカタカナ大文字(それぞれ、『ツ』『ヤ』)を区別せず、同一視したい  (2)濁音(『バ』)・破裂音(『パ』)・清音(『ハ』)を区別せず、同一視したい  (3)半角スペースと全角スペースを無視したい  (4)アルファベット小文字(『a』等)とアルファベット大文字(『A』)を区別せず、同一視した ≪例≫  Aテーブル/フリガナ : ケンサク キョウダイ  検索ワード    ・ケンサク キョウダイ(完全一致) ・・・ ○   ・ケンサク キヨウダイ(上記(1)) ・・・ ○   ・ケンサク キョウタイ(上記(2)) ・・・ ○   ・ケンサクキョウダイ(上記(3)) ・・・ ○  という結果にしたい。 【現時点】 ・照合順序をSQL文でしようしたら、  (2)は『AI』で対応できました。  (4)は『CI』で対応できました。 ・(3)はSQL文のWhere句に、半角スペースを無効にする『Replace』と全角スペースを無効にする『Replace』を記述することで対応できました。 ・(1)だけがどうしても対応できません。 →(3)の対応と同様に『Replace』での対応も可能なのですが、9つ程度(『ッ』『ャ』『ュ』『ョ』『ァ』『ィ』『ゥ』『ェ』『ォ』)追加しないといけないので、処理速度の低下が懸念点です。 どなたかいい方法をお持ちの方がいましたら、ご協力お願いいたします。 ■バージョン:10.50.1600.1 以上

  • MySQLで半角濁音文字の検索

    宜しくお願い致します。 MySQLのselect検索時にフリーワード検索をしています。 DB上には半角・全角文字が混在しており、検索窓に入力した文字の全角・半角を区別せずに検索しております。 文字コードがUTF-8なので、SQL文のwhere区で「collate utf8_unicode_ci」を指定して全角・半角の区別無しで検索しております。 しかし、半角濁音文字、たとえば「ベルト」や「パワー」等の文字列がDB上に半角カタカナで入っている場合に検索窓に全角で入力しても検索できません。 原因はDB上では半角の「ヘ」と「濁音記号」として認識しており、検索窓に入れた文字列は、そのまま「ベ」という1文字として認識しているので検索できないと思われます。 この問題を解決する方法が無くて悩んでおります。 どなたかご教授の程、宜しくお願いいたします。

    • ベストアンサー
    • MySQL
  • MSアクセス2000で英数の大文字・小文字とかな文字のカタカナ・ひらがなを区別して扱いたい

    クエリーやレホートでテキスト型フィールドに対してグルーピングなどを行う際に英数の大文字・小文字とかな文字のカタカナ・ひらがなを区別して扱いたいのですが、アクセスでは区別できないのでしょうか?オプションやプロパティなどを見ても見つかりません。 設定で区別ができないようなら、区分用のフィールドをつくって区別をしたいと考えています。その際、その区分を自動的に入力したいのです。 たとえば、Aフィールド(テキスト型)のデータを自動的に検査して(大文字・小文字やカタカナ・ひらがなに区別したい)、Bフィールドに自動的にそれを入力する方法などはありますでしょうか?

  • ひらがなとカタカナの区別

    likeで文字列を検索する際に、ひらがなとカタカナの区別を無効にして検索するようなことは可能でしょうか? よろしくお願いします。 環境:oracle10gR2

  • Access97 ひらがな・カタカナの区別

    Access97のデータを検索する時にひらがな・カタカナの区別なくヒットしてしまいます。 ひらがな・カタカナを区別できるようにするにはどのようにしたらいいでしょうか? ちなみにOffice97SR-2です。 私が個人で使用している端末では起こらない現象なのですが、業務用の端末では起こってしまいます。 現象が確認されているOSはWindows95・98・2000です。

  • 清音・撥音・濁音・半濁音

    平仮名には、清音・撥音・濁音・半濁音などがありますが、辞書で調べたところ、「清音=か、さ、た、は行」と出てきました。 濁音は「゛」が付いたもので、半濁音は「゜」が付いたもの(ぱ行)ですよね? なので、清音は「゛」も「゜」も付いていないもの全て(「ん」を除く。)だと思っていたのですが…。 じゃあ、あ行やな行の言葉は一体何音というのでしょうか?? 「清音・撥音・濁音・半濁音・拗音以外の言葉」?? どなたか教えてください。 よろしくお願いします!!

  • 清音と濁音

    ※ もし一つ前にこれと類似の書き込みが残っているのなら    そちらは無視して下さい。(削除はしたんだけど) ※ 特に接辞語の場合 (1) 高速道路 =고속도:로 の도をどの様に発音するのか?     ア. 高速+道路 の接尾語の語頭なので「平音の清音」     イ. 高速道路 の一語と考え、母音と母音とに挟まれているので「平音の濁音」     ウ  速度 속도の도が또と濃音なのはㄱㄷ並びだからであり、これに従えば고속도:로も        고속또:로 (2) 野外劇場 =야:외극장 の극をどの様に発音するのか?    (の前に、この語は 야:외/웨극짱 と発せられる、はこっちぃ措いといて。)     ア. 野外+劇場 の接尾語の語頭なので「平音の清音」     イ.  野外劇場  の一語と考え、母音と母音とに挟まれているので「平音の濁音」     ウ.  漢字の「劇」は濃音漢字である、と考えれば「濃音」   (3) 自分では、(1)はウ. (2)はア. と考えてはいるが御異見あらば伺いたく書き込みました。    

  • Accessフィールド名でひらがな、カタカナの区別

    Accessのクエリは、フィールド名のひらがな、カタカナを区別しないのでしょうか? こんなことがありました。 VBAのプログラム(クエリ)側ではフィールド名[ひらがな]を指定している箇所で、実際のフィールド名は[ヒラガナ]であり、異なっていることに気づきました。 しかしエラーを出力せずに動作していました。テーブルを見ると、希望通りにデータは格納されていました。 問題個所のクエリと対象のフィールド名は統一する予定ですが、 この動作がMicrosoftの仕様なのか、たまたま動作しているのか、そんなことは無いのか、 ちょっと気になったので質問させて頂きました。 宜しくお願い致します。