全部产品

间隔函数

更新时间:2019-03-05 15:48:21

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

DATE_ADD

  1. 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())

  • 示例

    1. SELECT DATE_ADD('DAY', 31, current_date()) as col1, current_date() as col2;
    2. +-----------------------+-----------------------+
    3. | col1 | col2 |
    4. +-----------------------+-----------------------+
    5. | 2019-01-08 | 2018-12-08 |
    6. SELECT DATE_ADD('second', 31, current_time()) as col1, current_time() as col2;
    7. +-----------------------+-----------------------+
    8. | col1 | col2 |
    9. +-----------------------+-----------------------+
    10. | 16:37:55 | 16:37:24 |
    11. SELECT DATE_ADD('second', 31, current_timestamp()) as col1, current_timestamp() as col2;
    12. +-----------------------+-----------------------+
    13. | col1 | col2 |
    14. +-----------------------+-----------------------+
    15. | 2018-12-08 16:39:02.0 | 2018-12-08 16:38:31.0 |

ADDDATE

  1. ADDDATE(date, INTERVAL expr unit)
  2. ADDDATE(timestamp,INTERVAL expr unit)
  • 命令说明:返回添加指定时间间隔后的日期,支持TIMESTAMP、DATE两种类型。

    注意:参数2应在参数1的精度范围内。

  • 示例:

    1. SELECT addDate(now(), interval '2' day) as col1;
    2. +-----------------------+
    3. | col1 |
    4. +-----------------------+
    5. | 2018-12-10 16:45:42.3 |
    6. SELECT addDate(now(), interval '2' minute) as col1;
    7. +-----------------------+
    8. | col1 |
    9. +-----------------------+
    10. | 2018-12-08 16:48:20.4 |

ADDTIME

  1. ADDTIME(expr1,expr2)
  • 命令说明:返回expr1 + expr2的结果

  • 参数说明:参数为VARCHAR类型

  • 示例:

    1. SELECT ADDTIME('2007-12-31 23:59:59.999999', '1 1:1:1.000002') as col1;
    2. +-------------------------+
    3. | col1 |
    4. +-------------------------+
    5. | 2008-01-02 01:01:00.999 |
    6. SELECT ADDTIME('23:59:59.999999', '1:1:1.000002') as col1;
    7. +-------------------------+
    8. | col1 |
    9. +-------------------------+
    10. | 01:01:00.999 |

PERIOD_ADD

  1. PERIOD_ADD(YYYYMM, monthNum)
  • 命令说明:在原有年月基础上新增monthNum月份

  • 参数说明:

    • YYYYMM:类型为bigint,例如201803。

    • monthNum:类型为bigint,月数,即在原有年月基础上新增monthNum月份。

  • 示例:

    1. SELECT PERIOD_ADD(200801,20) as col1;
    2. +--------+
    3. | col1 |
    4. +--------+
    5. | 200909 |

PERIOD_DIFF

  1. PERIOD_DIFF(YYYYMM, YYYYMM)
  • 命令说明:返回参数1减去参数2的月份

  • 参数说明:YYYYMM类型为BIGINT

  • 示例:

    1. SELECT PERIOD_DIFF(200802,200703) as col1;
    2. +------+
    3. | col1 |
    4. +------+
    5. | 11 |

DATE_DIFF

  1. date_diff(unit, datetime1, datetime2)
  • 命令说明:返回减去指定时间间隔后的日期

  • 参数说明:

    • unit:类型为VARCHAR。

    • datetime1、datetime2:类型为DATE或者TIMESTAMP。

      注意若datetime1、datetime2均为DATE类型,unit最小只能到DAY。

  • 示例:

    1. SELECT date_diff('day', current_date(), date_add('day', 2, current_date())) as col1;
    2. +------+
    3. | col1 |
    4. +------+
    5. | 2 |
    6. SELECT date_diff('minute', now(), date_add('day', 2, now())) as col1;
    7. +------+
    8. | col1 |
    9. +------+
    10. | 2880 |

SUBTIME

  1. SUBTIME(expr1,expr2)
  • 命令说明:返回expr1 - expr2后的时间,expr1与expr2格式相同。

  • 示例:

    1. SELECT SUBTIME('2007-12-31 23:59:59.999999','1 1:1:1.000002') as col1;
    2. +-------------------------+
    3. | col1 |
    4. +-------------------------+
    5. | 2007-12-30 22:58:58.999 |

SUBDATE/DATE_SUB

  1. SUBDATE(date,INTERVAL expr unit)
  2. SUBDATE(expr,days)
  • 命令说明:返回参数1减去指定天数(参数2)后的日期

  • 参数说明:类型为TIMESTAMP、DATE或者VARCHAR。

  • 示例:

    1. SELECT DATE_SUB(now(), INTERVAL 31 DAY) as col1;
    2. +-----------------------+
    3. | col1 |
    4. +-----------------------+
    5. | 2018-11-07 16:56:36.0 |
    6. SELECT SUBDATE(current_date(), INTERVAL 31 DAY) as col1;
    7. +-----------------------+
    8. | col1 |
    9. +-----------------------+
    10. | 2018-11-07 |
    11. SELECT SUBDATE(now(), 31) as col1;
    12. +-----------------------+
    13. | col1 |
    14. +-----------------------+
    15. | 2018-11-07 16:58:17.0 |

TIMESTAMPADD

  1. IMESTAMPADD(unit,interval,datetime_expr)
  • 命令说明:返回增加指定单位interval后的日期时间

  • 参数说明:类型为VARCHAR、DATE、TIMESTAMP或者TIME。

  • 示例:

    1. SELECT TIMESTAMPADD(WEEK,1,'2003-01-02') as col1;
    2. +------------+
    3. | col1 |
    4. +------------+
    5. | 2003-01-09 |
    6. SELECT TIMESTAMPADD(MONTH,1,'2003-01-02') as col1;
    7. +------------+
    8. | col1 |
    9. +------------+
    10. | 2003-02-02 |

TIMESTAMPDIFF

  1. TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
  • 命令说明:返回datetime_expr2 - datetime_expr1的整数差,单位为unit。

  • 参数说明:类型为VARCHAR、DATE、TIMESTAMP或者TIME。

  • 示例:

    1. SELECT TIMESTAMPDIFF(SECOND,curtime(),'20:39:39') as col1;
    2. +-------+
    3. | col1 |
    4. +-------+
    5. | 13120 |
    6. SELECT TIMESTAMPDIFF(DAY, now(), '2018-03-28 20:39:39') as col1;
    7. +------+
    8. | col1 |
    9. +------+
    10. | -254 |
    11. SELECT TIMESTAMPDIFF(DAY, curdate(), '2018-03-28') as col1;
    12. +------+
    13. | col1 |
    14. +------+
    15. | -255 |