8桁の数字を日付に変換するには

[Access 2016/2013/2010/2007]

短い文字列型(Access 2010/2007ではテキスト型)のフィールドに入力された8桁の数字の並びを(図1)、日付に変換する方法を紹介します(図2)。例えば、「20100805」は、「2010/08/05」という日付に変換されます。

図1 [登録日]フィールドに入力されている、日付を表す8桁の数字を…(→図2

図2 クエリを使用して日付データに変換する。

スポンサーリンク

手順ダイジェスト

登録日付: DateSerial(Mid([登録日],1,4),Mid([登録日],5,2),Mid([登録日],7,2))

手順解説

(準備)Mid関数を使用して4桁、2桁、2桁に分解する

8桁の数字を日付に変換する準備として、Mid関数を使用して、8桁を年4桁、月2桁、日2桁に分解します。Mid関数は、[文字列]の[開始位置]から[文字数]分の文字列を取り出す関数です(構文1)。

構文1 文字列から部分文字列を取り出す
Mid(文字列, 開始位置, 文字数)

「年」は1文字目から4文字分なので「Mid([登録日],1,4)」、「月」は5文字目から2文字分なので「Mid([登録日],5,2)」、「日」は7文字目から2文字分なので「Mid([登録日],7,2)」で求められます。

Mid("20100805",1,4) → 2010(「20100805」の1文字目から4文字分)
Mid("20100805",5,2) → 08(「20100805」の5文字目から2文字分)
Mid("20100805",7,2) → 05(「20100805」の7文字目から2文字分)

DateSerial関数を使用して年、月、日から日付を作成する

年、月、日の3つの数値から日付を作成するには、DateSerial関数を使用します(構文2)。

構文2 年、月、日の数値から日付を作成する
DateSerial(年, 月, 日)

引数[年][月][日]に上記のMid関数を当てはめれば、8桁の数字から日付を求められます(式1図3図4)。本来、引数[年][月][日]には整数値を指定するべきですが、数字の文字列を指定した場合は自動で数値に変換されるので、Mid関数を直接指定しても大丈夫です。

式1 [登録日]に入力された8桁の数字から日付を求める
登録日付: DateSerial(Mid([登録日],1,4),Mid([登録日],5,2),Mid([登録日],7,2))

図3 クエリの[フィールド]欄に式1を入力する。

図4 [登録日]のデータをもとに日付を表示できた。

メモ

クエリでテーブルと同じフィールド名を付けるには
式1では、演算フィールドに「登録日付」というフィールド名を設定しました。演算フィールドにテーブルと同じフィールド名を設定すると、循環参照が原因のエラーが出てしまうからです。しかし、クエリでもテーブルと同じ「登録日」というフィールド名にしたいこともあるでしょう。そんなときは、「循環参照エラーを回避してテーブルとクエリで同じフィールド名を付ける」を参照してください。
スポンサーリンク

関連記事