dポイントプレゼントキャンペーン実施中!

いつもお世話になっております。

Windows XP(SP3) 上でAccess 2003 SP3を利用しているのですが
クエリで"\"(半角円マーク)をWhere句に指定した際に
半角・全角とも抽出してしまい困っています。
回避策をご存知であれば教えてください。


■サンプルデータ
テーブル名を「テーブル1」登録データは次とします。

番号  名前(テキスト型)    説明
---- ---------------------  -----------------
 1 ああああ¥ああああ   #全角の円マーク
 2 ああああ\ああああ    #半角の円マーク

■作成したクエリ
SQLビューでいうと次になります。
SELECT 番号,名前
FROM テーブル1
WHERE 名前 Like "*\*"

【結果】
番号  名前(テキスト型)    説明
---- ---------------------  -----------------
 1 ああああ¥ああああ   #全角の円マークもヒットする
 2 ああああ\ああああ   


■他に試したSQL

(1)全角を明確に除外
SELECT テーブル1.番号, テーブル1.名前
FROM テーブル1
WHERE (((テーブル1.名前) Like "*\*" And (テーブル1.名前) Not Like "*¥*"));

>>【結果】該当件数0件となりいずれもヒットしない

(2)円マークをchrで指定
SELECT テーブル1.番号, テーブル1.名前
FROM テーブル1
WHERE 名前 Like ("*" & chr(92) & "*")

>>【結果】2件ともヒット

A 回答 (1件)

> 回避策をご存知であれば教えてください。



Accessのクエリの場合、「全角/半角」の違いだけでなく、
「カタカナ/ひらがな」まで同じものとして扱われてしまいます。
(Excelからインポートした場合など、その機能が重宝する
 場合もあるのですが)

確か、設定でこの問題を回避することはできなかったと
記憶していますので、全角/半角の区別が必要な場合、
私は以下のような方法を採っています:

Select 番号, 名前
From テーブル1
Where InStr(1, 名前, "\", 0);

つまり、第4引数を指定したInStr関数であれば、全/半角
の区別がされることを利用する、ということです。

なお、ヘルプでは「vbBinaryCompare」などの定数が提示
されていますが、これらはVBAでのみ有効で、クエリやマクロ
などでは使用できませんのでご注意ください。
(上記のように、「0」「1」などの「値」を指定します)


【今日の蛇足(汗)】
こちらの環境(Access2003/XP)で確認したところ、
今回の事例に限っては「InStr(名前, "\")」としても
抽出可能なようです。
(第1引数および第4引数を省略:詳細はヘルプを参照下さい)

これは恐らく、InStr関数の内部処理では、「\」は半角
円マークではなく「バックスラッシュ」として扱われている
のではないか・・・と推測します。
(クエリでは確かに「\」は「¥」の半角文字として扱われて
 いるのですけれどね・・・)
http://oshiete.goo.ne.jp/qa/4114026.html

一応、参考まで。
    • good
    • 0
この回答へのお礼

早々にお返事いただいたのにお礼が遅くなり申し訳ございません。

むむ、Accessにはそんな癖があるんですね。
VBAを組むほどの処理ではなかったので
教えていただいた方法で簡単に対応ができて助かりました。
本当にありがとうございました。


ーーーーーー
ちなみに、参考にされるみなさまに補足情報です。
Where句にほかの条件も指定したい場合は次のようにするとよいです。

Select 番号, 名前
From テーブル1
Where 名前 Like "*'*"
or 名前 Like "*""*"
or (((InStr(1,[エリア名],"\",0))<>False));

お礼日時:2011/08/03 13:04

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