11/27/2019

Access。なんで日付を8桁の数字で入力したの?どうやったら日付に変換できますか?【Convert to date】

Access。なんで日付を8桁の数字で入力したの?どうやったら日付に変換できますか?

<Access>

入社日を管理しているテーブルがあります。

入社日フィールドが、8桁の数字として入力されてしまっています。

Accessでは「型」というのが非常に大切なわけですが、今回はテキスト型のフィールド。しかも単なる8文字で入力されているという状態のテーブル。

これでは、何年勤務なのかも算出することすらできませんし、20151310というように、13月など無いのに、入力ミスをしている危険すらあります。

そこで、今回は、8桁の数字を日付に変更させていきます。

よく考えてしまうのは、左から4文字が年だから…と発想するのは、いいのですが、例えば、Left関数を使って、

Left([入社日],4)

というように演算フィールドをつくってみても、単に左から「4文字」を抽出しただけになってしまいます。

Year関数をつかったところで、抽出された数字をシリアル値変換しただけなので、やりたいこととは程遠くなってしまいます。

そこで、Accessでは、DataSerial関数とMid関数を使うことで変換することができます。

それでは、クエリデザインをつかって、クエリを作成していきます。
次のようなDateSerial関数を使った演算フィールドを作ります。

入社日日付: DateSerial(Mid([入社日],1,4),Mid([入社日],5,2),Mid([入社日],7,2))
とりあえず、実行して確認してみましょう。

このように、8桁の数字だったテキスト型のデータが、日付型で表示することができました。

しかも、年月日の境目に「/(スラッシュ)」も入力されています。

DateSerial関数は、年月日から日付を作成する関数で、
DateSerial(年,月,日)
という構文です。

Excelでいうと、DATE関数に似ています。

ただ、今回のように文字を抽出して日付にしようと、Excelで同じことをするには、CONCATENATE関数の引数でLEFT関数・MID関数・RIGHT関数を使い、さらに年月日の境目に「/(スラッシュ)」も入力して設定する必要があります。

だた、Excelの場合、数字文字列になってしまいます。

AccessのDateSerial関数の引数は数値で入力や設定をしなくても、「数字の文字列」を自動的に「数値」に変換してくれるので、Mid関数で単純に抽出しても、問題はありません。

Mid関数ですが、ExcelのMID関数とおなじで、
Mid([入社日],1,4)
というのは、入社日フィールドの左1文字目から4文字目までを抽出という意味ですね。

ExcelとAccessで微妙に関数が異なっていたり、使い方が違ったりする点があります。

ということで、Accessの場合は、DateSerial関数とMid関数を組み合わせて使うことで、単なる8桁の数字を日付に変換することができます。