Access。年月日が別々のフィールドから元号の日付をつくるには?
<Access:CDate関数>
Excelで、年月日が別々のセルに入力してある場合は、DATE関数を使うことで日付にすることができますが、Accessでは、どのようにしたらいいのでしょうか?【西暦年月日の場合】
次のようなテーブルを用意しました。このテーブルをつかって、クエリを作っていきましょう。
年月日という演算フィールドをつくってみました。
年月日: CDate([年] & "/" & [月] & "/" & [日])
CDate関数をつかうことで、日付型で表示することができます。
ただし、ExcelのDATE関数は、DATE(年,月,日)という引数ですが、「,」でフィールドを区切るのではなく、「”/”」(スラッシュ)を使って、年月日のそれぞれのフィールドを「&」をつかって結合させてあげます。
文字結合させたので、文字型(短いテキスト型)になっていますから、CDate関数をつかって、日付型に変更させることによって、日付にすることができます。
では、実行して確認してみましょう。
このように、日付にすることができました。
テーブルが年月日で分かれているフィールドならば、CDate関数だけで対応できるのですが、次のようなフィールドで管理している場合は、どうしたらいいのでしょうか?
【元号年月日の場合】
先程と異なるのは、西暦の年フィールドで管理しているのではなくて、元号で管理している場合です。
元号のフィールドがあり、その元号の年フィールドがあります。
こうなっている場合は、当然「”/”」(スラッシュ)で連結するわけにはいきません。
このような元号の場合は、次のように演算フィールドを作ったクエリで対応することができます。
「年」「月」「日」でフィールドを連結することで、対応させて確認してみましょう。
日付: CDate([元号] & [年] & "年" & [月] & "月" & [日] & "日")
実行して確認してみましょう。
別々のフィールドだったのが、CDate関数を使うことで、日付型になったのはいいのですが、残念ながら、元号表示ではなくて、西暦表示になってしまっています。
このCDate関数は、連結内に、元号を含んでいても、基本設定されている、西暦表示になってしまいます。
なので、元号にするには、Farmat関数とCDate関数のネストにした演算フィールドを作る必要があります。
先程の演算フィールドを次のように修正します。
元号表示: Format(CDate([元号] & [年] & "年" & [月] & "月" & [日] & "日"),"ggge\年m\月d\日")
Format関数は、Excelでいう表示形式を設定することができる関数です。表示形式はExcelと大きく変わりませんが、Accessの場合、
"ggge\年m\月d\日"
と年月日を「”」(ダブルコーテーション)で囲むのではなく、「\」をつけることで、「\」の次の文字をそのまま表示させることができます。
この点が、ExcelとAccessの相違点です。
では、実行して確認してみましょう。
このように、元号で年月日を表示することができました。
そして、元号だけでなくて、実は、Excelと大きく異なることがAccessにはあります。
それは、Excelは、1900/1/1から管理しているので、それよりも前の日付を作ることはできないのですが、Accessは、それよりも前の日付。
今回でいうと、明治初期でも管理することができるようになっています。