- ベストアンサー
SQLのLIKE検索で清音と濁音/半濁音を区別する
VB2008+Accessでアプリケーションを開発しています。 SQLのLIKE検索では、清音と濁音/半濁音、ひらがなとカタカナ等を区別してくれないのですが、これを区別してくれる方法はないでしょうか? 例:(field1はテキスト型フィールド) SELECT * FROM tblA WHERE field1 LIKE '%グラス%' を実行すると、 「クラス」「思いめぐらす」なども検索されてしまいます。 これを、 「サングラス」「グラスワイン」などだけがヒットするようにしたいのです。 ちなみに、MySQLではコチラに回答がありました。 http://oshiete1.goo.ne.jp/qa3918969.html Accessだけが不可能で、SQLServerやOracleならできるかどうかも知りたいです。どうぞ宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
LIKEではないですが、 SELECT Name FROM Table1 WHERE InStr(StrConv(Name,128),StrConv('グラス',128))<>0 で抽出できます。 パフォーマンスについては調べていません。(相当悪いかも)
その他の回答 (2)
- nora1962
- ベストアンサー率60% (431/717)
instr関数とvbBinaryCompareモードの組み合わせで逃げられませんか。
お礼
ご回答ありがとうございます。 回答番号No.2のShowMeHowさんのご回答とほぼ同じ方法と思いますが、vbBinaryCompareの使い方も調べておこうと思います。ありがとうございました。
- jamshid6
- ベストアンサー率88% (591/669)
SQL Serverだけ書いときます。 以下いずれでも。 SELECT * FROM TblA WHERE FIELD1 LIKE '%グラス%' COLLATE JAPANESE_CI_AS_KS_WS SELECT * FROM TblA WHERE FIELD1 LIKE '%グラス%' COLLATE JAPANESE_BIN
お礼
早速のご回答ありがとうございます。 残念ながら、いずれもAccessでは構文エラーになりました。 Oracleで試してみたところ、なんと、COLLATE・・・ナシで普通にLIKE検索するだけで、きちんと区別してくれました。今回はDBをOracleに変更できませんので、なんとかしてAccessで実現できないものかと悩んでおります。ありがとうございました。
お礼
ご回答ありがとうございます。 望んでいた通りの結果を得ることができました。LIKEの代わりにInStrの戻り値を調べるとは感心しました。また、AccessのStrConv関数に128という引数を与えて、文字コードを揃えたうえで比較するところも素晴らしいです。 パフォーマンスですが、試しにAccessにJDBC接続して、SQL Developerで計測してみたところ、普通のLIKE検索と比較して約3倍の時間を要しましたが、今回は結果が大事ですので、我慢したいと思います。 大変救われました。ありがとうございました。