zoukankan      html  css  js  c++  java
  • mysql 中 DATE_ADD(date,INTERVAL expr type)

    在Hiredmyway中:

    SELECT if(LENGTH(company_name) > 30,
                      concat(SUBSTRING(company_name, 1, 27), '...'),
                      company_name)
                      AS org_name,
                   count(id) AS num,
                   org_id AS value
                   ,latest_modify_date
              FROM v_job_search
             WHERE     deleted = 0
                   AND status =
                          (SELECT code_desc
                             FROM enums
                            WHERE kind = 'JS' AND code = '1' AND deleted = 0)
                  and real_modify_date < date_add(now(),interval -30 minute)             # 要同步数据。因为是视图笔数据库慢30分钟。所以要减去30分钟
            GROUP BY org_id
            ORDER BY real_modify_date desc limit 0,20;#取前20值


    转自:http://14344twt.blog.163.com/blog/static/475309592010101285018562/

    mysql 中 DATE_ADD(date,INTERVAL expr type) 和DATE_SUB(date,INTERVAL expr type)

    这些函数执行日期运算。 date 是一个 DATETIME 或DATE值,用来指定起始时间。 expr是一个表达式,用来指定从起始日期添加或减去的时间间隔值。 Expr是一个字符串;对于负值的时间间隔,它可以以一个 ‘-’开头。type 为关键词,它指示了表达式被解释的方式。

    关键词INTERVA及 type 分类符均不区分大小写。


        以下表显示了type和expr 参数的关系:

    type值              预期的expr 格式 #
      ------------------------------------------------

    MICROSECOND          MICROSECONDS

    SECOND              SECONDS

    MINUTE              MINUTES

    HOUR                HOURS

    DAY                 DAY

    WEEK                WEEKS

    MONTH               MONTHS

    QUARTER             QUARTERS

    YEAR                YEARS

    SECOND_MICROSECOND  'SECONDS.MICROSECONDS'

    MINUTE_MICROSECOND  'MINUTES.MICROSECONDS'

    MINUTE_SECOND       'MINUTES:SECONDS'

    HOUR_MICROSECOND    'HOURS.MICROSECONDS'

    HOUR_SECOND         'HOURS:MINUTES:SECONDS'

    HOUR_MINUTE         'HOURS:MINUTES'

    DAY_MICROSECOND     'DAYS.MICROSECONDS'

    DAY_SECOND          'DAYS HOURS:MINUTES:SECONDS'

    DAY_MINUTE          'DAYS HOURS:MINUTES'

    DAY_HOUR            'DAYS HOURS'

    YEAR_MONTH          'YEARS-MONTHS'

    MySQL 允许任何expr 格式中的标点分隔符。表中所显示的是建议的 分隔符。若 date 参数是一个 DATE值,而你的计算只会包括 YEAR、MONTH和DAY部分(即, 没有时间部分), 其结果是一个DATE 值。否则,结果将是一个DATETIME值。

    若位于另一端的表达式是一个日期或日期时间值 , 则INTERVAL expr type只允许在 + 操作符的两端。对于–操作符, INTERVAL expr type 只允许在其右端,原因是从一个时间间隔中提取一个日期或日期时间值是毫无意义的。(见下面的例子)。


       mysql> SELECT '1997-12-31 23:59:59' + INTERVAL 1SECOND;

       -> '1998-01-01 00:00:00'

    mysql> SELECT INTERVAL 1 DAY + '1997-12-31';

       -> '1998-01-01'

    mysql> SELECT '1998-01-01' - INTERVAL 1SECOND;

       -> '1997-12-31 23:59:59'

    mysql> SELECT DATE_ADD('1997-12-3123:59:59',INTERVAL 1 SECOND);

       -> '1998-01-01 00:00:00'

    mysql> SELECT DATE_ADD('1997-12-3123:59:59',INTERVAL 1 DAY);

       -> '1998-01-01 23:59:59'

    mysql> SELECT DATE_ADD('1997-12-3123:59:59',INTERVAL '1:1' MINUTE_SECOND);

       -> '1998-01-01 00:01:00'

    mysql> SELECT DATE_SUB('1998-01-0100:00:00',INTERVAL '1 1:1:1' DAY_SECOND);

       -> '1997-12-30 22:58:59'

    mysql> SELECT DATE_ADD('1998-01-0100:00:00',INTERVAL '-1 10' DAY_HOUR);

       -> '1997-12-30 14:00:00'

    mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31DAY);

       -> '1997-12-02'

    mysql> SELECT DATE_ADD('1992-12-3123:59:59.000002',INTERVAL '1.999999' SECOND_MICROSECOND);

       -> '1993-01-01 00:00:01.000001'

    若你指定了一个过于短的时间间隔值 (不包括type 关键词所预期的所有时间间隔部分), MySQL假定你已经省去了时间间隔值的最左部分。 例如,你指定了一种类型的DAY_SECOND, expr的值预期应当具有天、小时、分钟和秒部分。若你指定了一个类似 '1:10'的值, MySQL假定天和小时部分不存在,那么这个值代表分和秒。换言之, '1:10' DAY_SECOND 被解释为相当于 '1:10'MINUTE_SECOND。这相当于 MySQL将TIME 值解释为所耗费的时间而不是日时的解释方式。

    假如你对一个日期值添加或减去一些含有时间部分的内容,则结果自动转化为一个日期时间值:

    mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1DAY);

       -> '1999-01-02'

    mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1HOUR);

       -> '1999-01-01 01:00:00'

    假如你使用了格式严重错误的日期,则结果为 NULL。假如你添加了 MONTH、YEAR_MONTH或YEAR,而结果日期中有一天的日期大于添加的月份的日期最大限度,则这个日期自动被调整为添加月份的最大日期:
       mysql> SELECT DATE_ADD('1998-01-30', INTERVAL 1MONTH);

       -> '1998-02-28'

    2019/07/04更新

    实践证明:其实也可以传入字符串形式的起始时间,比如

    SELECT DATE_ADD('1998-06-30', INTERVAL 2 day);

    End.
    原文地址:https://blog.csdn.net/yuan8080/article/details/6989467
  • 相关阅读:
    UVA1349 Optimal Bus Route Design 最优巴士路线设计
    POJ3565 Ants 蚂蚁(NEERC 2008)
    UVA1663 Purifying Machine 净化器
    UVa11996 Jewel Magic 魔法珠宝
    NEERC2003 Jurassic Remains 侏罗纪
    UVA11895 Honorary Tickets
    gdb调试coredump(使用篇)
    使用 MegaCLI 检测磁盘状态并更换磁盘
    员工直接坦诚直来直去 真性情
    山东浪潮超越3B4000申泰RM5120-L
  • 原文地址:https://www.cnblogs.com/jpfss/p/11131850.html
Copyright © 2011-2022 走看看