• DATE_ADD:返回增加指定时间间隔后的日期。
  • ADDDATE:返回增加指定单位(例如day,minute)时长后的日期时间。
  • ADDTIME:返回两个日期时间相加后的结果。
  • PERIOD_ADD:在原有年月(YYYYMM)基础上增加指定月份。
  • PERIOD_DIFF:返回两个年月(YYYYMM)相减后的月份。
  • DATE_DIFF:返回两个日期时间的间隔。
  • SUBTIME:返回两个格式相同的日期时间参数相减后的结果。
  • SUBDATE/DATE_SUB:返回减去指定天数后的日期时间。
  • TIMESTAMPADD:返回增加指定单位(例如week)时长后的日期时间。
  • TIMESTAMPDIFF:返回减去指定单位(例如week)时长后的日期时间。

DATE_ADD

date_add(unit, value, datetime)
  • 命令说明:返回增加指定时间间隔后的日期。
  • 参数说明:
    • unit:单位,类型为VARCHAR。

      涉及的时间单位类型有MILLISECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR。

    • value:类型为BIGINT。
    • datetime:日期时间字段,类型为TIMESTAMP、TIME或DATE。
      重要 参数unit必须在参数datetime日期时间字段精度范围内。例如,不支持:date_add('second', 31, current_date())以及date_add('day', 12, current_time())
  • 示例:
      SELECT DATE_ADD('DAY', 31, current_date()) as col1, current_date() as col2;
      +-----------------------+-----------------------+
      | col1                  | col2                  |
      +-----------------------+-----------------------+
      | 2019-01-08            | 2018-12-08            |
      SELECT DATE_ADD('second', 31, current_time()) as col1, current_time() as col2;
      +-----------------------+-----------------------+
      | col1                  | col2                  |
      +-----------------------+-----------------------+
      | 16:37:55              | 16:37:24              |
      SELECT DATE_ADD('second', 31, current_timestamp()) as col1, current_timestamp() as col2;
      +-----------------------+-----------------------+
      | col1                  | col2                  |
      +-----------------------+-----------------------+
      | 2018-12-08 16:39:02.0 | 2018-12-08 16:38:31.0 |

ADDDATE

ADDDATE(date, INTERVAL expr unit)
ADDDATE(timestamp,INTERVAL expr unit)
  • 命令说明:返回添加指定时间间隔后的日期,支持TIMESTAMP、DATE两种类型。
    重要 参数2应在参数1的精度范围内。
  • 示例:
      SELECT addDate(now(), interval '2' day) as col1;
      +-----------------------+
      | col1                  |
      +-----------------------+
      | 2018-12-10 16:45:42.3 |
      SELECT addDate(now(), interval '2' minute) as col1;
      +-----------------------+
      | col1                  |
      +-----------------------+
      | 2018-12-08 16:48:20.4 |

ADDTIME

ADDTIME(expr1,expr2)
  • 命令说明:返回expr1 + expr2的结果。
  • 参数说明:参数为VARCHAR类型
  • 示例:
      SELECT ADDTIME('2007-12-31 23:59:59.999999', '1 1:1:1.000002')  as col1;
      +-------------------------+
      | col1                    |
      +-------------------------+
      | 2008-01-02 01:01:00.999 |
      SELECT ADDTIME('23:59:59.999999', '1:1:1.000002') as col1;
      +-------------------------+
      | col1                    |
      +-------------------------+
      | 01:01:00.999            |

PERIOD_ADD

PERIOD_ADD(YYYYMM, monthNum)
  • 命令说明:在原有年月基础上新增monthNum月份。
  • 参数说明:
    • YYYYMM:类型为bigint,例如201803。
    • monthNum:类型为bigint,月数,即在原有年月基础上新增monthNum月份。
  • 示例:
      SELECT PERIOD_ADD(200801,20) as col1;
      +--------+
      | col1   |
      +--------+
      | 200909 |

PERIOD_DIFF

PERIOD_DIFF(YYYYMM, YYYYMM)
  • 命令说明:返回参数1减去参数2的月份。
  • 参数说明:YYYYMM类型为BIGINT。
  • 示例:
      SELECT PERIOD_DIFF(200802,200703) as col1;
      +------+
      | col1 |
      +------+
      |   11 |

DATE_DIFF

date_diff(unit, datetime1, datetime2)
  • 命令说明:返回减去指定时间间隔后的日期。
  • 参数说明:
    • unit:类型为VARCHAR。
    • datetime1、datetime2:类型为DATE或者TIMESTAMP。
      重要 注意若datetime1、datetime2均为DATE类型,unit最小只能到DAY。
  • 示例:
      SELECT date_diff('day', current_date(), date_add('day', 2, current_date())) as col1;
      +------+
      | col1 |
      +------+
      |    2 |
      SELECT date_diff('minute', now(), date_add('day', 2, now())) as col1;
      +------+
      | col1 |
      +------+
      | 2880 |

SUBTIME

SUBTIME(expr1,expr2)
  • 命令说明:返回expr1 - expr2后的时间,expr1与expr2格式相同。
  • 示例:
      SELECT SUBTIME('2007-12-31 23:59:59.999999','1 1:1:1.000002') as col1;
      +-------------------------+
      | col1                    |
      +-------------------------+
      | 2007-12-30 22:58:58.999 |

SUBDATE/DATE_SUB

SUBDATE(date,INTERVAL expr unit)
SUBDATE(expr,days)
  • 命令说明:返回参数1减去指定天数(参数2)后的日期。
  • 参数说明:类型为TIMESTAMP、DATE或者VARCHAR。
  • 示例:
      SELECT DATE_SUB(now(), INTERVAL 31 DAY) as col1;
      +-----------------------+
      | col1                  |
      +-----------------------+
      | 2018-11-07 16:56:36.0 |
      SELECT SUBDATE(current_date(), INTERVAL 31 DAY) as col1;
      +-----------------------+
      | col1                  |
      +-----------------------+
      | 2018-11-07            |
      SELECT SUBDATE(now(), 31) as col1;
      +-----------------------+
      | col1                  |
      +-----------------------+
      | 2018-11-07 16:58:17.0 |

TIMESTAMPADD

TIMESTAMPADD(unit,interval,datetime_expr)
  • 命令说明:返回增加指定单位interval后的日期时间。
  • 参数说明:类型为VARCHAR、DATE、TIMESTAMP或者TIME。
  • 示例:
      SELECT TIMESTAMPADD(WEEK,1,'2003-01-02') as col1;
      +------------+
      | col1       |
      +------------+
      | 2003-01-09 |
      SELECT TIMESTAMPADD(MONTH,1,'2003-01-02') as col1;
      +------------+
      | col1       |
      +------------+
      | 2003-02-02 |

TIMESTAMPDIFF

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
  • 命令说明:返回datetime_expr2 - datetime_expr1的整数差,单位为unit。
  • 参数说明:类型为VARCHAR、DATE、TIMESTAMP或者TIME。
  • 示例:
      SELECT TIMESTAMPDIFF(SECOND,curtime(),'20:39:39') as col1;
      +-------+
      | col1  |
      +-------+
      | 13120 |
      SELECT TIMESTAMPDIFF(DAY, now(), '2018-03-28 20:39:39') as col1;
      +------+
      | col1 |
      +------+
      | -254 |
      SELECT TIMESTAMPDIFF(DAY, curdate(), '2018-03-28') as col1;
      +------+
      | col1 |
      +------+
      | -255 |