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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM