• ベストアンサー

ACCESS:英数字以外が含むデータを抽出

例えば、ABC00&0&というデータがあります。 ルールとして 1.1-7桁の間には0-9、A-Z以外の文字が入らない。 2.最終行には何が入ってもいい。 まず1に反する部分で挫折しております Not Between "0" and "Z"なんてやってみたんですが、期待した結果にはなりませんでした。 条件1,2に反するレコードを抜き出すクエリを教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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] のようにします。

ticktak
質問者

お礼

大変役に立ちました。 どうもありがとうございました。

その他の回答 (2)

回答No.2

因みに >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文字以上」の条件を足します。

回答No.1

>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]*"; で良いです。

ticktak
質問者

お礼

ありがとうございます。うまくいきました。 クエリの読み方を教えていただけますか。 [0-9A-Z]では0から9とAからZという意味だと思いますが、0-9とA-Zはくっついててもいいのは何故でしょうか。

関連するQ&A

専門家に質問してみよう