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桁の数字を日付に変換することができます。