こんにちは。
郵便番号が7桁でないレコードを抽出したく、郵便番号フィールドに、Not Like "#######"という抽出条件を設定しました。
しかし、000-000というデータが抽出条件をすり抜けてしまいました。7桁ではありますがハイフンは数字ではないはずなのに、なぜ抽出条件をすり抜けてしまうのでしょうか?
また、正しく7桁の半角英数字ではないものを抽出するためにはどのように抽出条件を記述すればよろしいでしょうか?
こんにちは。
郵便番号が7桁でないレコードを抽出したく、郵便番号フィールドに、Not Like "#######"という抽出条件を設定しました。
しかし、000-000というデータが抽出条件をすり抜けてしまいました。7桁ではありますがハイフンは数字ではないはずなのに、なぜ抽出条件をすり抜けてしまうのでしょうか?
また、正しく7桁の半角英数字ではないものを抽出するためにはどのように抽出条件を記述すればよろしいでしょうか?
「抽出条件をすり抜けてしまいました」とは、具体的にどうなったのでしょうか。
「000-000」というデータが表示されたのか、表示されなかったのか、どちらでしょうか。
Not Like "#######"
なら表示されるのが正常です。こちらでサンプルを作成しましたが、表示されました。
000-000が、本来抽出されなければならないはずが抽出されませんでした。
000&000も、本来抽出されなければならないはずが抽出されませんでした。(別サンプル)
ちなみに、0から始まる郵便番号が正しく表示されるよう、郵便番号フィールドは短いテキスト型になっています。
そのフィールドに定型入力が設定されてませんか。
もし、されているならその設定を教えてください。
ちなみに郵便番号フィールドなら、000-0000 という書式になるはずですが、
000-000 というのはどのような事情でしょうか。
定型入力は何も設定されておりませんでした。
レポート出力の際は7つテキストボックスを作成し、それぞれ=Mid([〒],1,1)~=Mid([〒],7,1)という風にしています。ですので郵便番号フィールドは、更新クエリでハイフンを""に置換し、7桁数字の書式にしています。
000-000や000&000は、7桁数字以外が抽出されているかどうかの検証中に抽出条件から外れていたので例えとして提示致しました。
"7桁の数字"以外が正確に抽出されるためにはどのような抽出条件を設定すれば良いか、というのが本題です。
Not Like "#######"
この抽出条件で一見問題ないように見えて、例のようなデータが抽出条件に引っかからなかったので、原因と対策を知りたいです。
フィールドの書式プロパティもなにも設定されてませんか。
こちらで作成したサンプルでは正しい結果になってますね。
上記の画像のようなサンプルを新規作成した場合はどうなりますか。
同じサンプルを作成したところ、Hatenaさんと同じ実行結果になりました。
他に何か抽出条件が設定されているのではないかと思い探してみたところ、
上記が見つかりました。
いつ書いたのか、なぜ書いたのか、どんな意味なのか全く思い出せませんでしたが、こちらを消したところ、000-000や000&000は抽出されるようになりました。
しかし、今度は消す前は抽出されていた000-000が抽出されなくなってしまいました。
7桁の半角数字以外のレコードを抽出するという目的がまだ達成できていません。
これはおそらく全角文字以外がふくまれているかを判定したかったのでしょう。ただし、この式ではその目的を達成してません。
話がややこしくなるので、まずはこの条件は削除しておいて、
Not Like "#######"
の抽出条件の方が解決してから取り組みましょうか。私の提示したシンプルなサンプルのテーブルにそのデータを追加して試してみてください。
こちらのサンプルでは抽出されました。
問題のクエリに他に抽出条件はありませんか。
わからないようならSQLビューにして表示されるSQL文をコピーしてここに貼り付けてください。
週を跨ぎ返事が遅くなりすみません。
こちらSQL文です。
SQLには問題はなさそうてすね。
こちらのサンプルでは問題なく抽出されます。
ちょっと原因が想像できないです。
すみません、000-000は抽出されます。
000ー000が抽出されません。(長音符)
データ的な問題以外の問題があるんですかね?
上からそれぞれ、2行目の文字のコピペ、1行目の文字のコピペ、半角ハイフンです
hirotonのテストでは全て同じ結果になりました
※この掲示板に記述された文字のコピペです。実際のデータと同じとは限りません
長音符ですか。
こちらのサンプルのクエリでも再現できました。
これはバグっぽいですね。
って調べてみたら私のプログでも紹介してましたね。
すっかり忘れてました(-_-;)
長音「ー」を含むデータをクエリであいまい抽出すると - hatena chips
hirotonさんも確認されてますが、VBAなら問題なさそうなので下記で紹介しているLike演算子代替ユーザー定義関数 LikeB を使えば長音府も抽出できますね。
クエリで大文字/小文字、全角/半角を区別して文字列比較をしたい - hatena chips
全角文字を含む場合も抽出したいということですね。
例えば 0000000 とか。
その場合は、下記のような抽出条件にします。
これなら、長音符は全角なので、長音符を含むものも抽出されます。
なるほど、クエリにバグありですか。こまったもんですねぇ
ちょっとクエリ上ではどうにもならなさそうな感じだったのでACCESSのクエリでワイルドカード比較はNG、代替手法を使うしかないって感じになりそう
7桁の郵便番号として、半角数字7文字であることを確認する計算式を考えてみました