MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む

このページは機械翻訳したものです。

12.7 日付および時間関数

このセクションでは、時間値の処理に使用できる関数について説明します。 各日付日時型が持つ値の範囲、および値を指定する際の有効な書式については、セクション11.2「日時データ型」を参照してください。

表 12.11 「日付および時刻関数」

名前 説明
ADDDATE() 日付値に時間値 (間隔) を加算します
ADDTIME() 時間を加算します
CONVERT_TZ() タイムゾーン間での変換
CURDATE() 現在の日付を返します
CURRENT_DATE(), CURRENT_DATE CURDATE() のシノニムです
CURRENT_TIME(), CURRENT_TIME CURTIME() のシノニムです
CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP NOW() のシノニムです
CURTIME() 現在の時間を返します
DATE() 日付または日付時間式の日付部分を抽出します
DATE_ADD() 日付値に時間値 (間隔) を加算します
DATE_FORMAT() 日付を指定された書式に設定します
DATE_SUB() 日付から時間値 (間隔) を引きます
DATEDIFF() 2 つの日付の差を求めます
DAY() DAYOFMONTH() のシノニムです
DAYNAME() 曜日の名前を返します
DAYOFMONTH() 月の日を返します (0 - 31)
DAYOFWEEK() 引数の曜日インデックスを返します
DAYOFYEAR() 年の日を返します (1 - 366)
EXTRACT() 日付の一部を抽出します
FROM_DAYS() 日数を日付に変換します
FROM_UNIXTIME() Unix タイムスタンプを日付として書式設定
GET_FORMAT() 日付書式文字列を返します
HOUR() 時を抽出します
LAST_DAY 引数の月の最終日を返します
LOCALTIME(), LOCALTIME NOW() のシノニムです
LOCALTIMESTAMP, LOCALTIMESTAMP() NOW() のシノニムです
MAKEDATE() 年と年間通算日から日付を作成します
MAKETIME() 時、分、秒から時間を作成します
MICROSECOND() 引数からマイクロ秒を返します
MINUTE() 引数から分を返します
MONTH() 渡された日付から月を返します
MONTHNAME() 月の名前を返します
NOW() 現在の日付と時間を返します
PERIOD_ADD() 年月に期間を加算します
PERIOD_DIFF() 期間内の月数を返します
QUARTER() 日付引数から四半期を返します
SEC_TO_TIME() 秒を hh:mm:ss 形式に変換
SECOND() 秒 (0-59) を返します
STR_TO_DATE() 文字列を日付に変換します
SUBDATE() 3 つの引数で呼び出されるときは DATE_SUB() のシノニムです
SUBTIME() 時間の差を求めます
SYSDATE() この関数が実行される時間を返します
TIME() 渡された式の時部分を抽出します
TIME_FORMAT() 時間として書式設定します
TIME_TO_SEC() 秒に変換された引数を返します
TIMEDIFF() 時間の差を求めます
TIMESTAMP() 引数が 1 つの場合、この関数は日付または日付時間式を返します。引数が 2 つの場合、引数の合計を返します
TIMESTAMPADD() 日付時間式に間隔を加算します
TIMESTAMPDIFF() 日付時間式から間隔を減算します
TO_DAYS() 日に変換された日付引数を返します
TO_SECONDS() 0 年以降の秒数に変換された日付または日付時間引数を返します
UNIX_TIMESTAMP() Unix タイムスタンプを返します
UTC_DATE() 現在の UTC 日付を返します
UTC_TIME() 現在の UTC 時間を返します
UTC_TIMESTAMP() 現在の UTC 日付と時間を返します
WEEK() 週番号を返します
WEEKDAY() 曜日インデックスを返します
WEEKOFYEAR() 日付の暦週を返します (1 - 53)
YEAR() 年を返します
YEARWEEK() 年と週を返します

次に、日付関数の使用例を示します。 次のクエリーは、過去 30 日以内の date_col 値を含むすべての行を選択します。

mysql> SELECT something FROM tbl_name
    -> WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col;

このクエリーは、将来の日付を持つ行も選択します。

通常、日付値が要求される関数では、日付時間値が受け入れられ、時間の部分は無視されます。 通常、時間値が要求される関数では、日付時間値が受け入れられ、日付の部分は無視されます。

現在の日付または時間をそれぞれ返す関数は、クエリー実行の開始時にクエリーごとに 1 回だけ評価されます。 つまり、NOW() などの関数が単一クエリー内で複数回参照されても、常に同じ結果が生成されます。 (設計上、単一クエリーにはストアドプログラム (ストアドルーチン、トリガー、またはイベント) の呼び出し、およびそのプログラムによって呼び出されるすべてのサブプログラムも含まれています。) この原則は、CURDATE()CURTIME()UTC_DATE()UTC_TIME()UTC_TIMESTAMP()、およびそれらのシノニムにも適用されます。

CURRENT_TIMESTAMP(), CURRENT_TIME(), CURRENT_DATE() および FROM_UNIXTIME() 関数は、time_zone システム変数のセッション値として使用可能な現在のセッションタイムゾーンの値を返します。 また、UNIX_TIMESTAMP() では、引数がセッションタイムゾーンの日時値であると想定しています。 セクション5.1.15「MySQL Server でのタイムゾーンのサポート」を参照してください。

zero 日付または '2001-11-00' のような不完全な日付とともに使用できる日付関数もありますが、使用できない日付関数もあります。 通常、日付の一部を抽出する関数は不完全な日付でも正しく機能するため、ゼロ以外の値が要求される場合に 0 を返すことができます。 例:

mysql> SELECT DAYOFMONTH('2001-11-00'), MONTH('2005-00-00');
        -> 0, 0

その他の関数では完全な日付が要求され、日付が不完全な場合は NULL が返されます。 これらには、日付演算を実行する関数や日付の一部を名前にマップする関数が含まれます。 例:

mysql> SELECT DATE_ADD('2006-05-00',INTERVAL 1 DAY);
        -> NULL
mysql> SELECT DAYNAME('2006-05-00');
        -> NULL

DATE() 関数の値を引数として渡し、日部分がゼロの不完全な日付を拒否すると、いくつかの関数が厳密になります: CONVERT_TZ(), DATE_ADD(), DATE_SUB(), DAYOFYEAR(), TIMESTAMPDIFF(), TO_DAYS(), TO_SECONDS(), WEEK(), WEEKDAY(), WEEKOFYEAR(), YEARWEEK()

TIMEDATETIME および TIMESTAMP 値の小数秒は、マイクロ秒までの精度でサポートされます。 時間引数を取る関数は、小数秒を含む値を受け入れます。 時間関数からの戻り値には、必要に応じて小数秒が含まれます。