- ベストアンサー
ACCESS:英数字以外が含むデータを抽出
例えば、ABC00&0&というデータがあります。 ルールとして 1.1-7桁の間には0-9、A-Z以外の文字が入らない。 2.最終行には何が入ってもいい。 まず1に反する部分で挫折しております Not Between "0" and "Z"なんてやってみたんですが、期待した結果にはなりませんでした。 条件1,2に反するレコードを抜き出すクエリを教えて下さい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>[0-9A-Z]では0から9とAからZという意味だと思いますが、0-9とA-Zはくっついててもいいのは何故でしょうか。 ワイルドカードの [ ] は「該当文字を括弧内に列挙する」という書き方をします。 例えば [01236789ABCEGIK] は「この中の文字のどれか1文字に一致する」になります。 このとき「0123」とか「ABC」など、文字が続いている部分は「0-3」とか「A-C」のように「□から○まで」と言うように省略できます。 上記例であれば [0-36-9A-CEGIK] のように書けます。 従って [0-9A-Z] は [0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ] と書いたのと同じ意味になります。そして、その意味は 「0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ」のどれか1文字に一致する になります。 例えば、小文字も入れるなら [0-9A-Za-z] のようにします。
その他の回答 (2)
- chie65536(@chie65535)
- ベストアンサー率44% (8800/19959)
因みに >2.最終行には何が入ってもいい。 が「必ず8文字以上であること」つまり「7文字しか無い場合は除外」を意味するのであれば SELECT * FROM テーブル名 WHERE Left([フィールド名],7) Not Like "[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]*" And Len([フィールド名])>=8; のように「必ず8文字以上」の条件を足します。
- chie65536(@chie65535)
- ベストアンサー率44% (8800/19959)
>2.最終行には何が入ってもいい。 「最終桁」じゃなくて「最終行」ってのが意味不明です。 「最終桁」の間違いなのであれば、条件は >1.1-7桁の間には0-9、A-Z以外の文字が入らない。 だけになります(「何でもいい」ってのは「判定の必要がない」って事です)から SELECT * FROM テーブル名 WHERE Left([フィールド名],7) Not Like "[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]*"; で良いです。
お礼
ありがとうございます。うまくいきました。 クエリの読み方を教えていただけますか。 [0-9A-Z]では0から9とAからZという意味だと思いますが、0-9とA-Zはくっついててもいいのは何故でしょうか。
お礼
大変役に立ちました。 どうもありがとうございました。