【ACCESS】クエリによる正規表現の基本的書き方
いつもお世話になっております。
ACCESSのクエリで、下記8パターンにマッチする文字列を
yyyyMMddの形で抽出する方法が判りません。
例でも構わないので、ご教示いただけないでしょうか。
(1)yyyyMMdd (数字は半角)
(2)yyyy年M月dd日 (数字は半角)
(3)yyyy年MM月dd日 (数字は全角)
(4)yyyy年M月dd日 (数字は全角)
(5)yyyy年MM月dd日 (数字は半角)
(6)yyyy年M月dd (数字は半角)
(7)yyyy/MM/dd (数字は全角)
(8)yyyy/MM/dd (数字は半角)
※12月32日等の日付不正は対象外
数字の全・半角は区別しなくても抽出可能と考えています。
ただ、そもそも、正規表現の基本的な書き方が判らず。。
グループ化させるための括弧「()」や、論理和の「|」を使うと
抽出できませんでした。
accessでは利用不可なのでしょうか。。
一応、私の作成したクエリを掲載致します。
テーブルaからdate列を抽出します。上記8パターンにマッチする場合は、yyyyMMdd形式で、いずれにもマッチしなければ空白を返させたいと思います。
SELECT IIf (a.date Like '[1-9][0-9][0-9][0-9](0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])', a.date,
IIf (a.date Like '[1-9][0-9][0-9][0-9]年[1-9]月(0[1-9]|[12][0-9]|3[01])日', Format(CDate(Format(Replace(Replace(Replace(a.date, '年', ''), '月', ''), '日', ''), "@@@@/@@/@@")), "yyyymmdd"),
IIf (a.date Like '[1-9][0-9][0-9][0-9]年(0[1-9]|1[012])月(0[1-9]|[12][0-9]|3[01])日', Format(CDate(Format(Replace(Replace(Replace(a.date, '年', ''), '月', ''), '日', ''), "@@@@/@@/@@")), "yyyymmdd"),
IIf (a.date Like '[1-9][0-9][0-9][0-9]年[1-9]月(0[1-9]|[12][0-9]|3[01])日', Format(CDate(Format(Replace(Replace(Replace(a.date, '年', ''), '月', ''), '日', ''), "@@@@/@@/@@")), "yyyymmdd"),
IIf (a.date Like '[1-9][0-9][0-9][0-9]年(0[1-9]|1[012])月(0[1-9]|[12][0-9]|3[01])日', Format(CDate(Format(Replace(Replace(Replace(a.date, '年', ''), '月', ''), '日', ''), "@@@@/@@/@@")), "yyyymmdd"),
IIf (a.date Like '[1-9][0-9][0-9][0-9]年[1-9]月(0[1-9]|[12][0-9]|3[01])', Format(CDate(Format(Replace(Replace(a.date, '年', ''), '月', ''), "@@@@/@@/@@")), "yyyymmdd"),
IIf (a.date Like '[1-9][0-9][0-9][0-9]/(0[1-9]|1[012])/(0[1-9]|[12][0-9]|3[01])', Format(CDate(Format(Replace(Replace(a.date, '/', ''), '/', ''), "@@@@/@@/@@")), "yyyymmdd"),
IIf (a.date Like '[1-9][0-9][0-9][0-9]/(0[1-9]|1[012])/(0[1-9]|[12][0-9]|3[01])', Format(CDate(Format(Replace(Replace(a.date, '/', ''), '/', ''), "@@@@/@@/@@")), "yyyymmdd"),
''
)
)
)
)
)
)
)
)
FROM a
以上、何卒よろしくお願いいたします。
お礼
項目の型や、入力値によるエラーだったみたいです。あと、おっしゃる通り、年度とか、~月度という考え方も必要ですね。ありがとうございました。