MySQL @Wiki 実用リファレンス

DATE_ADD

最終更新:

Bot(ページ名リンク)

- view
管理者のみ編集可


DATE_ADD

DATE_ADD(date,INTERVAL expr type)

DATE_SUB(date,INTERVAL expr type)
これらの関数では日付演算が実行される。
MySQL バージョン 3.23 以降では、+ 演算子のどちらかの側にINTERVAL expr type を使用できる。この場合、もう一方の側の式には日付値または日付時刻値を指定する。 - 演算子を使用する場合は、演算子の右側にのみ INTERVAL expr type を使用できる。これは、日付値または日付時刻値を間隔から差し引いても意味がないため(下の例を参照)。
date には、開始日とする DATETIME または DATE 値を指定する。expr には、開始日に加える、または開始日から差し引く間隔値を表す式を文字列として指定する。先頭に ‘-’ を付けて負の間隔を表すこともできる。type には、式の解釈方法を示すキーワードを指定する。
次の表に、type 引数と expr 引数がどのように関連するかを示す。
type 値 前提となる expr の形式
SECOND SECONDS
MINUTE MINUTES
HOUR HOURS
DAY DAYS
MONTH MONTHS
YEAR YEARS
MINUTE_SECOND 'MINUTES:SECONDS'
HOUR_MINUTE 'HOURS:MINUTES'
DAY_HOUR 'DAYS HOURS'
YEAR_MONTH 'YEARS-MONTHS'
HOUR_SECOND 'HOURS:MINUTES:SECONDS'
DAY_MINUTE 'DAYS HOURS:MINUTES'
DAY_SECOND 'DAYS HOURS:MINUTES:SECONDS'
DAY_MICROSECOND 'DAYS.MICROSECONDS'
HOUR_MICROSECOND 'HOURS.MICROSECONDS'
MINUTE_MICROSECOND 'MINUTES.MICROSECONDS'
SECOND_MICROSECOND 'SECONDS.MICROSECONDS'
MICROSECOND 'MICROSECONDS'

type 値 DAY_MICROSECOND、HOUR_MICROSECOND、MINUTE_MICROSECOND、SECOND_MICROSECOND、MICROSECOND は、MySQL 4.1.1 以降で使用できる。
MySQL では、expr の形式で任意の句読記号を使用できる。 上の表では、これらの句読記号の一部を示している。date 引数に DATE 型の値を指定し、計算に YEAR、MONTH、DAY 部分のみを組み込む(つまり、時刻部分は含めない)場合、結果は DATE 型の値になる。それ以外の場合、DATETIME 型の値が返される。


mysql> [[SELECT]] '1997-12-31 23:59:59' + INTERVAL 1 SECOND;
        -> '1998-01-01 00:00:00'
mysql> SELECT INTERVAL 1 DAY + '1997-12-31';
        -> '1998-01-01'
mysql> SELECT '1998-01-01' - INTERVAL 1 SECOND;
        -> '1997-12-31 23:59:59'
mysql> SELECT DATE_ADD('1997-12-31 23:59:59',
    ->                 INTERVAL 1 SECOND);
        -> '1998-01-01 00:00:00'
mysql> SELECT DATE_ADD('1997-12-31 23:59:59',
    ->                 INTERVAL 1 DAY);
        -> '1998-01-01 23:59:59'
mysql> SELECT DATE_ADD('1997-12-31 23:59:59',
    ->                 INTERVAL '1:1' MINUTE_SECOND);
        -> '1998-01-01 00:01:00'
mysql> SELECT DATE_SUB('1998-01-01 00:00:00',
    ->                 INTERVAL '1 1:1:1' DAY_SECOND);
        -> '1997-12-30 22:58:59'
mysql> SELECT DATE_ADD('1998-01-01 00:00:00',
    ->                 INTERVAL '-1 10' DAY_HOUR);
        -> '1997-12-30 14:00:00'
mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
        -> '1997-12-02'
mysql> SELECT DATE_ADD('1992-12-31 23:59:59.000002',
    ->                 INTERVAL '1.999999' SECOND_MICROSECOND);
        -> '1993-01-01 00:00:01.000001'

指定した間隔値が短すぎる場合(つまり、type キーワードによって想定される間隔部分の一部を含んでいない場合)、MySQL では、間隔値の左端の部分がないとみなされる。たとえば、type を DAY_SECOND として指定すると、expr の値は、日、時、分、秒の各部で構成されると想定される。この場合、'1:10' のような値を指定すると、値は日部分と時間部分を持たず、分と秒を表すと解釈される。つまり、'1:10' DAY_SECOND と指定した場合、'1:10' MINUTE_SECOND と指定した場合と同じように解釈されることになる。これは、MySQL で TIME 値が 1 日の時刻ではなく経過時間として解釈されるのに類する。
注意:時刻部分を持つ値を日付値に加えたり、日付値から差し引いたりすると、結果は自動的に日付時刻型の値に変換される。

mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1 DAY);
        -> '1999-01-02'
mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1 HOUR);
        -> '1999-01-01 01:00:00'

誤った日付を使用すると、結果は NULL になる。MONTH、YEAR_MONTH、YEAR のいずれかを加えた結果の日付が、新しい月の最大日数より大きい場合、新しい月の最大日数に調整される。

mysql> SELECT DATE_ADD('1998-01-30', interval 1 month);
        -> '1998-02-28'

注意: 上記の例で、キーワード INTERVAL と type 指定子はケース非依存。




記事メニュー
ウィキ募集バナー