アプリ版:「スタンプのみでお礼する」機能のリリースについて

VB2008+Accessでアプリケーションを開発しています。

SQLのLIKE検索では、清音と濁音/半濁音、ひらがなとカタカナ等を区別してくれないのですが、これを区別してくれる方法はないでしょうか?

例:(field1はテキスト型フィールド)
SELECT * FROM tblA WHERE field1 LIKE '%グラス%'
を実行すると、
「クラス」「思いめぐらす」なども検索されてしまいます。
これを、
「サングラス」「グラスワイン」などだけがヒットするようにしたいのです。

ちなみに、MySQLではコチラに回答がありました。
http://oshiete1.goo.ne.jp/qa3918969.html

Accessだけが不可能で、SQLServerやOracleならできるかどうかも知りたいです。どうぞ宜しくお願いします。

A 回答 (3件)

LIKEではないですが、


SELECT Name FROM Table1 WHERE InStr(StrConv(Name,128),StrConv('グラス',128))<>0
で抽出できます。 
パフォーマンスについては調べていません。(相当悪いかも)
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/02/19 18:34

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

    • good
    • 1
この回答へのお礼

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

お礼日時:2009/02/19 18:46

SQL Serverだけ書いときます。


以下いずれでも。

SELECT * FROM TblA
WHERE FIELD1 LIKE '%グラス%' COLLATE JAPANESE_CI_AS_KS_WS

SELECT * FROM TblA
WHERE FIELD1 LIKE '%グラス%' COLLATE JAPANESE_BIN
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/02/19 11:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す