[DATE_FORMAT関数]日付や時刻の表示形式を指定して表示する

日付や時刻の表示形式を指定して表示したい場合、DATE_FORMAT関数を使用します。
DATE_FORMAT関数を使うと、日時や日付などの値が指定した日時形式の文字列に変換され、表示されます。日付や時刻をほかの文字列と結合する場合にも、DATE_FORMAT関数を使用します。

DATE_FORMAT関数の基本的な使いかた

DATE_FORMAT(フィールドコード, "日時の形式", "タイムゾーン")

具体的な記述例は計算式の例で紹介しています。

引数の詳細

DATE_FORMAT関数には、第1引数(フィールドコード)、第2引数(日時の形式)、第3引数(タイムゾーン)を指定します。各引数の基本的な使いかたを説明します。

第1引数:フィールドコード

第1引数には、次のフィールドを使用できます。フィールドは、フィールドコードで指定します。

  • 日時
    1000年1月1日0時0分(協定世界時)から9999年12月31日23時59分(協定世界時)までの日時を指定できます。
  • 日付
  • 時刻
  • 作成日時
  • 更新日時
  • 数値
  • 計算

また、次の演算子と関数も使用できます。
+, -, *, /, ^, SUM

フィールドに入力した日時だけではなく、日時に時間を足し引きするなど、計算結果の日付を指定することも可能です。計算式には、時間を秒単位で指定します。たとえば、1時間は「3600」、または「60*60*1」のように指定します。

  • 翌日の日付を表示する例:
    DATE_FORMAT(日付+24*60*60*1, "YYYY/MM/dd", "Etc/GMT")

第2引数:日時の形式

第2引数に指定する日時の形式は、次の表の書式指定子を使用して指定します。それぞれの書式指定子は、対応する文字列に置き換わります。

書式指定子 説明 2020年4月1日正午を変換した場合の文字列
YYYYまたはyyyy 西暦の年に置き換わります。 2020
MMMM レコードを編集したユーザーが設定している表示言語の月に置き換わります。 英語の場合:April
日本語の場合:4月
中国語の場合:四月
MMM レコードを編集したユーザーが設定している表示言語の、短縮形の月に置き換わります。 英語の場合:Apr
MM ゼロ埋めありの月に置き換わります。 04
M ゼロ埋めなしの月に置き換わります。 4
dd ゼロ埋めありの日に置き換わります。 01
d ゼロ埋めなしの日に置き換わります。 1
a レコードを編集したユーザーが設定している表示言語の、「午前」または「午後」に置き換わります。 英語の場合:PM
日本語の場合:午後
中国語の場合:下午
KK 午前を0時から11時とした、12時間表記の時表示に置き換わります。ゼロ埋めされます。 00
K 午前を0時から11時とした、12時間表記の時表示に置き換わります。ゼロ埋めされません。 0
hh 午前を1時から12時とした、12時間表記の時表示に置き換わります。ゼロ埋めされます。 12
h 午前を1時から12時とした、12時間表記の時表示に置き換わります。ゼロ埋めされません。 12
HH 1日を0時から23時とした、24時間表記の時表示に置き換わります。ゼロ埋めされます。 12
H 1日を0時から23時とした、24時間表記の時表示に置き換わります。ゼロ埋めされません。 12
kk 1日を1時から24時とした、24時間表記の時表示に置き換わります。ゼロ埋めされます。 12
k 1日を1時から24時とした、24時間表記の時表示に置き換わります。ゼロ埋めされません。 12
mm ゼロ埋めありの分表示に置き換わります。 00
m ゼロ埋めなしの分表示に置き換わります。 0
ss ゼロ埋めありの秒表示に置き換わります。 00
s ゼロ埋めなしの秒表示に置き換わります。 0
Z UTC(協定世界時)との時差に置き換わります。hhmmの形式です。 +0900
ZZ UTC(協定世界時)との時差に置き換わります。hh:mmの形式です。 +09:00
ZZZ タイムゾーンのIDに置き換わります。 Asia/Tokyo

第3引数:タイムゾーン

第3引数にはタイムゾーンを指定します。
第1引数で日付/時刻フィールドを指定した場合は、「Etc/GMT」(協定世界時のタイムゾーンID)を指定します。
それ以外のフィールドを指定した場合は、どのタイムゾーンで表示するかを選ぶことができます。
例:DATE_FORMAT(日時, "YYYY年M月d日", "Asia/Tokyo")

サマータイムがあるタイムゾーンを指定した場合は、計算結果にサマータイムが反映されます。
例)DATE_FORMAT(日時, "YYYY/MM/dd HH:mm ZZ", "America/Los_Angeles")
-協定世界時の 2019-01-01 00:00 は 2018/12/31 16:00 - 08:00 に変換されます。
-協定世界時の 2018-08-01 00:00 は 2018/07/31 17:00 - 07:00 に変換されます。

「system」を指定すると、cybozu.com共通管理で設定されているタイムゾーン(システムタイムゾーン)が適用されます。

計算式の例

DATE_FORMAT関数を使用した計算式の例を説明します。
DATE_FORMAT関数の計算結果は文字列になるため、計算式は文字列(1行)に記述しましょう。

計算式:DATE_FORMAT(日付, "YYYY年M月d日", "Etc/GMT")

「日付」フィールドの形式を○○年○○月○○日に変えます。
「日付」フィールドの値が「2020-04-01」の場合、計算結果は2020年4月1日になります。
計算式:DATE_FORMAT(日時, "YYYY-MM-dd HH:mm", "America/Los_Angeles")

「日時」フィールドの形式を「YYYY-MM-dd HH:mm」にします。また、タイムゾーンを太平洋標準時に変えます。
「日時」フィールドの値が「2020-04-01 13:00」の場合、計算結果は2020-03-31 21:00になります(日本時間からの変換です)。
計算式:氏名 & "-" & DATE_FORMAT(作成日時, "YYYYMMdd", "system")

「氏名」フィールドの文字列とレコード作成日時を結合します。
「氏名」フィールドの値が「田中 愛美」、レコードの作成日時が「2021-06-21 13:00」の場合、計算結果は「田中 愛美-20210621」となります。

参考:日付と文字列を結合して表示したい
計算式:DATE_FORMAT(生年月日, "MM", "Etc/GMT")

「生年月日」フィールドの値から誕生月を計算します。
「生年月日」フィールドの値が「1969-12-31」の場合、計算結果は「12」になります。
計算式:DATE_FORMAT(申込日 + (60*60*24*30), "YYYY-MM-dd", "Etc/GMT")

「申込日」フィールドの値から、30日後の試用終了日を計算します。
「申し込み」フィールドの値が「2021-07-01」の場合、計算結果は「2021-07-31」になります。

TIPS:UNIX時刻

UNIX時刻とは、1970年1月1日午前0時(協定世界時)からの経過秒数のことです。UNIXタイムスタンプとも呼ばれます。たとえば日時が2016年4月1日午前0時(協定世界時)の場合、UNIX時刻は「1459468800」です。
第1引数には、UNIX時刻を指定することも可能です。-30610224000以上、253402300799以下のUNIX時刻を指定できます。
また、第1引数で数値、計算フィールドを指定した場合は、そのフィールドの値がUNIX時刻として扱われます。