mysql日期時間操作函數詳解

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

win7可以設定每周從哪一天開始,win2003等不能方便的修改。有的是周日開始,有的是周一開始。而工作中有的時候每周是從周六開始算的,有些數據需要按周統計,那么那種方式比較好呢?

通過下面的研究,認為yearweek()是適合的,它返回的是 201311這樣的格式。若要把周六當做新的一周的開始,那么就是:
select yearweek(DATE_ADD(now(), INTERVAL 1 DAY));
mysql> select yearweek(DATE_ADD(now(), INTERVAL 1 DAY));
+-------------------------------------------+
| yearweek(DATE_ADD(now(), INTERVAL 1 DAY)) |
+-------------------------------------------+
| ???????????????????????????????????201311 |
+-------------------------------------------+
1 row in set
mysql> select yearweek(now());
+-----------------+
| yearweek(now()) |
+-----------------+
| ?????????201310 |
+-----------------+
1 row in set
mysql>?

mysql日期時間操作函數詳解,更多請參見Mysql技術手冊11.3節,“日期和時間類型”。

下面的例子使用了時間函數。以下詢問選擇了最近的 30天內所有帶有date_col 值的記錄:

mysql> SELECT something FROM tbl_name

????-> WHERE?DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col;

注意,這個詢問也能選擇將來的日期記錄。?

用于日期值的函數通常會接受時間日期值而忽略時間部分。而用于時間值的函數通常接受時間日期值而忽略日期部分。

返回各自當前日期或時間的函數在每次詢問執行開始時計算一次。這意味著在一個單一詢問中,對諸如NOW() 的函數多次訪問總是會得到同樣的結果(未達到我們的目的,單一詢問也包括對存儲程序或觸發器和被該程序/觸發器調用的所有子程序的調用 )。這項原則也適用于?CURDATE()、 CURTIME()、 UTC_DATE()、 UTC_TIME()、UTC_TIMESTAMP(),以及所有和它們意義相同的函數。

CURRENT_TIMESTAMP()、 CURRENT_TIME()、 CURRENT_DATE()以及FROM_UNIXTIME()函數返回連接當前時區內的值,這個值可用作time_zone系統變量的值。此外, UNIX_TIMESTAMP() 假設其參數為一個當前時區的時間日期值。更多信息請參見5.10.8節,“MySQL服務器時區支持”。

以下函數的論述中返回值的范圍會請求完全日期。 若一個日期為“零” 值,或者是一個諸如'2001-11-00'之類的不完全日期, 提取部分日期值的函數可能會返回 0。 例如, DAYOFMONTH('2001-11-00') 會返回0。

ADDDATE(date,INTERVAL expr type) ADDDATE(expr,days)?
當被第二個參數的INTERVAL格式激活后, ADDDATE()就是DATE_ADD()的同義詞。相關函數SUBDATE() 則是DATE_SUB()的同義詞。對于INTERVAL參數上的信息 ,請參見關于DATE_ADD()的論述。

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

????????-> '1998-02-02'

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

????????-> '1998-02-02'

若 days 參數只是整數值,則 MySQL 5.1將其作為天數值添加至 expr。

mysql> SELECT?ADDDATE('1998-01-02', 31);

????????-> '1998-02-02'

ADDTIME(expr,expr2)?
ADDTIME()將 expr2添加至expr 然后返回結果。 expr 是一個時間或時間日期表達式,而expr2 是一個時間表達式。

mysql> SELECT?ADDTIME('1997-12-31 23:59:59.999999',

????->????????????????'1 1:1:1.000002');

????????-> '1998-01-02 01:01:01.000001'

mysql> SELECT?ADDTIME('01:00:00.999999', '02:00:00.999998');

????????-> '03:00:01.999997'

CONVERT_TZ(dt,from_tz,to_tz)?
CONVERT_TZ() 將時間日期值dt 從from_tz 給出的時區轉到to_tz給出的時區,然后返回結果值。關于可能指定的時區的詳細論述,更多信息請參見5.10.8節,“MySQL服務器時區支持”。若自變量無效,則這個函數會返回 NULL。

在從若from_tz 到UTC的轉化過程中,該值超出 TIMESTAMP 類型的被支持范圍,那么轉化不會發生。關于 TIMESTAMP 范圍的論述,更多信息請參見11.1.2節,“日期和時間類型概述”。

mysql> SELECT?CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');

????????-> '2004-01-01 13:00:00'

mysql> SELECT?CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');

????????-> '2004-01-01 22:00:00'

注釋:若要使用諸如 'MET'或 'Europe/Moscow'之類的指定時間區,首先要設置正確的時區表。詳細說明見5.10.8節,“MySQL服務器時區支持”。?

CURDATE()?
將當前日期按照'YYYY-MM-DD' 或YYYYMMDD 格式的值返回,具體格式根據函數用在字符串或是數字語境中而定。

mysql> SELECT CURDATE();

????????-> '1997-12-15'

mysql> SELECT CURDATE() + 0;

????????-> 19971215

CURRENT_DATE CURRENT_DATE()?
CURRENT_DATE和CURRENT_DATE()是的同義詞.

CURTIME()?
將當前時間以'HH:MM:SS'或 HHMMSS 的格式返回, 具體格式根據函數用在字符串或是數字語境中而定。?

mysql> SELECT CURTIME();

????????-> '23:50:26'

mysql> SELECT CURTIME() + 0;

????????-> 235026

CURRENT_TIME, CURRENT_TIME()?
CURRENT_TIME 和CURRENT_TIME() 是CURTIME()的同義詞。

CURRENT_TIMESTAMP, CURRENT_TIMESTAMP()?
CURRENT_TIMESTAMP和 CURRENT_TIMESTAMP()是NOW()的同義詞。

DATE(expr)?
提取日期或時間日期表達式expr中的日期部分。

mysql> SELECT DATE('2003-12-31 01:02:03');

????????-> '2003-12-31'

DATEDIFF(expr,expr2)?
DATEDIFF() 返回起始時間 expr和結束時間expr2之間的天數。Expr和expr2 為日期或 date-and-time 表達式。計算中只用到這些值的日期部分。

mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');

????????-> 1

mysql> SELECT DATEDIFF('1997-11-30 23:59:59','1997-12-31');

????????-> -31

DATE_ADD(date,INTERVAL expr type) DATE_SUB(date,INTERVAL expr type)?
這 些函數執行日期運算。 date 是一個 DATETIME 或DATE值,用來指定起始時間。 expr 是一個表達式,用來指定從起始日期添加或減去的時間間隔值。??Expr是一個字符串;對于負值的時間間隔,它可以以一個 ‘-’開頭。 type 為關鍵詞,它指示了表達式被解釋的方式。?

關鍵詞INTERVA及 type 分類符均不區分大小寫。

以下表顯示了type 和expr 參數的關系:

type 值
?預期的 expr 格式
?

type?預期的?expr?格式
MICROSECONDMICROSECONDS
SECONDSECONDS
MINUTEMINUTES
HOURHOURS
DAYDAYS
WEEKWEEKS
MONTHMONTHS
QUARTERQUARTERS
YEARYEARS
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 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 假定你已經省去了時間間隔值的最左部分。 例如,你指定了一種類型的DAY_SECOND, expr 的值預期應當具有天、 小時、分鐘和秒部分。若你指定了一個類似 '1:10'的值, MySQL 假定天和小時部分不存在,那么這個值代表分和秒。換言之, '1:10' DAY_SECOND 被解釋為相當于 '1:10' MINUTE_SECOND。這相當于 MySQL將TIME 值解釋為所耗費的時間而不是日時的解釋方式。?????????????

假如你對一個日期值添加或減去一些含有時間部分的內容,則結果自動轉化為一個日期時間值:

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'

DATE_FORMAT(date,format)?
根據format 字符串安排date 值的格式。

以下說明符可用在 format 字符串中:

?

說明符說明
%a工作日的縮寫名稱??(Sun..Sat)
%b月份的縮寫名稱??(Jan..Dec)
%c月份,數字形式(0..12)
%D帶有英語后綴的該月日期??(0th, 1st, 2nd, 3rd, ...)
%d該月日期, 數字形式?(00..31)
%e該月日期, 數字形式(0..31)
%f微秒?(000000..999999)
%H小時(00..23)
%h小時(01..12)
%I小時?(01..12)
%i分鐘, 數字形式?(00..59)
%j一年中的天數?(001..366)
%k小時?(0..23)
%l小時?(1..12)
%M月份名稱?(January..December)
%m月份, 數字形式?(00..12)
%p上午(AM)或下午(?PM)
%r時間?, 12小時制?(小時hh:分鐘mm:秒數ss?后加?AM或PM)
%S秒?(00..59)
%s秒?(00..59)
%T時間?, 24小時制?(小時hh:分鐘mm:秒數ss)
%U周?(00..53),?其中周日為每周的第一天
%u周?(00..53),?其中周一為每周的第一天?
%V周?(01..53),?其中周日為每周的第一天?;?和?%X同時使用
%v周?(01..53),?其中周一為每周的第一天?;?和?%x同時使用
%W工作日名稱?(周日..周六)
%w一周中的每日?(0=周日..6=周六)
%X該周的年份,其中周日為每周的第一天, 數字形式,4位數;和%V同時使用
%x該周的年份,其中周一為每周的第一天, 數字形式,4位數;和%v同時使用
%Y年份, 數字形式,4位數
%y年份, 數字形式?(2位數)
%%‘%’文字字符
?

所有其它字符都被復制到結果中,無需作出解釋。

注意, ‘%’字符要求在格式指定符之前。

月份和日期說明符的范圍從零開始,原因是 MySQL允許存儲諸如 '2004-00-00'的不完全日期.

mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
????????-> 'Saturday October 1997'
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
????????-> '22:23:00'
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00',
??????????????????????????'%D %y %a %d %m %b %j');
????????-> '4th 97 Sat 04 10 Oct 277'
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00',
??????????????????????????'%H %k %I %r %T %S %w');
????????-> '22 22 10 10:23:00 PM 22:23:00 00 6'
mysql> SELECT DATE_FORMAT('1999-01-01', '%X %V');
????????-> '1998 52'?

DAY(date)?
DAY() 和DAYOFMONTH()的意義相同。

DAYNAME(date)?
返回date 對應的工作日名稱。

mysql> SELECT DAYNAME('1998-02-05');

????????-> '周四'

DAYOFMONTH(date)?
返回date 對應的該月日期,范圍是從 1到31。

mysql> SELECT DAYOFMONTH('1998-02-03');

????????-> 3

DAYOFWEEK(date)?
返回date (1 = 周日, 2 = 周一, ..., 7 = 周六)對應的工作日索引。這些索引值符合 ODBC標準。

mysql> SELECT DAYOFWEEK('1998-02-03');

????????-> 3

DAYOFYEAR(date)?
返回date 對應的一年中的天數,范圍是從 1到366。

mysql> SELECT DAYOFYEAR('1998-02-03');

????????-> 34

EXTRACT(type FROM date)?
EXTRACT()函數所使用的時間間隔類型說明符同 DATE_ADD()或DATE_SUB()的相同,但它從日期中提取其部分,而不是執行日期運算。?

mysql> SELECT EXTRACT(YEAR FROM '1999-07-02');

???????-> 1999

mysql> SELECT EXTRACT(YEAR_MONTH FROM '1999-07-02 01:02:03');

???????-> 199907

mysql> SELECT EXTRACT(DAY_MINUTE FROM '1999-07-02 01:02:03');

???????-> 20102

mysql> SELECT EXTRACT(MICROSECOND

????->????????????????FROM '2003-01-02 10:30:00.00123');

????????-> 123

FROM_DAYS(N)?
給定一個天數??N, 返回一個DATE值。

mysql> SELECT FROM_DAYS(729669);

????????-> '1997-10-07'

使用 FROM_DAYS()處理古老日期時,務必謹慎。他不用于處理陽歷出現前的日期(1582)。更多信息請參見12.6節,“MySQL使用什么日歷?”。

FROM_UNIXTIME(unix_timestamp) , FROM_UNIXTIME(unix_timestamp,format)?
返回'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS 格式值的unix_timestamp參數表示,具體格式取決于該函數是否用在字符串中或是數字語境中。

若format 已經給出,則結果的格式是根據format 字符串而定。 format 可以包含同DATE_FORMAT() 函數輸入項列表中相同的說明符。

mysql> SELECT FROM_UNIXTIME(875996580);

????????-> '1997-10-04 22:23:00'

mysql> SELECT FROM_UNIXTIME(875996580) + 0;

????????-> 19971004222300

mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),

????->??????????????????????'%Y %D %M %h:%i:%s %x');

????????-> '2003 6th August 06:22:58 2003'

GET_FORMAT(DATE|TIME|DATETIME, 'EUR'|'USA'|'JIS'|'ISO'|'INTERNAL')?
返回一個格式字符串。這個函數在同DATE_FORMAT() 及STR_TO_DATE()函數結合時很有用。

第一個參數的3個可能值和第二個參數的5個可能值產生 15 個可能格式字符串 (對于使用的說明符,更多信息請參見DATE_FORMAT()函數說明表 )。

?

函數調用結果
GET_FORMAT(DATE,'USA')'%m.%d.%Y'
GET_FORMAT(DATE,'JIS')'%Y-%m-%d'
GET_FORMAT(DATE,'ISO')'%Y-%m-%d'
GET_FORMAT(DATE,'EUR')'%d.%m.%Y'
GET_FORMAT(DATE,'INTERNAL')'%Y%m%d'
GET_FORMAT(DATETIME,'USA')'%Y-%m-%d-%H.%i.%s'
GET_FORMAT(DATETIME,'JIS')'%Y-%m-%d %H:%i:%s'
GET_FORMAT(DATETIME,'ISO')'%Y-%m-%d %H:%i:%s'
GET_FORMAT(DATETIME,'EUR')'%Y-%m-%d-%H.%i.%s'
GET_FORMAT(DATETIME,'INTERNAL')'%Y%m%d%H%i%s'
GET_FORMAT(TIME,'USA')'%h:%i:%s %p'
GET_FORMAT(TIME,'JIS')'%H:%i:%s'
GET_FORMAT(TIME,'ISO')'%H:%i:%s'
GET_FORMAT(TIME,'EUR')'%H.%i.%S'
GET_FORMAT(TIME,'INTERNAL')'%H%i%s'
?

ISO 格式為ISO 9075, 而非ISO 8601.

也可以使用TIMESTAMP, 這時GET_FORMAT()的返回值和DATETIME相同。

mysql> SELECT DATE_FORMAT('2003-10-03',GET_FORMAT(DATE,'EUR'));

????????-> '03.10.2003'

mysql> SELECT STR_TO_DATE('10.31.2003',GET_FORMAT(DATE,'USA'));

????????-> '2003-10-31'

或見13.5.3節,“SET語法”。

HOUR(time)?
返回time 對應的小時數。對于日時值的返回值范圍是從 0 到 23 。

mysql> SELECT HOUR('10:05:03');

????????-> 10

然而,??TIME 值的范圍實際上非常大, 所以HOUR可以返回大于23的值。

mysql> SELECT HOUR('272:59:59');

????????-> 272

LAST_DAY(date)?
獲取一個日期或日期時間值,返回該月最后一天對應的值。若參數無效,則返回NULL。

mysql> SELECT LAST_DAY('2003-02-05');

????????-> '2003-02-28'

mysql> SELECT LAST_DAY('2004-02-05');

????????-> '2004-02-29'

mysql> SELECT LAST_DAY('2004-01-01 01:01:01');

????????-> '2004-01-31'

mysql> SELECT LAST_DAY('2003-03-32');

????????-> NULL

LOCALTIME, LOCALTIME()?
LOCALTIME 及 LOCALTIME()和NOW()具有相同意義。

LOCALTIMESTAMP, LOCALTIMESTAMP()?
LOCALTIMESTAMP和LOCALTIMESTAMP()和NOW()具有相同意義。

MAKEDATE(year,dayofyear)?
給出年份值和一年中的天數值,返回一個日期。dayofyear 必須大于 0 ,否則結果為 NULL。

mysql> SELECT MAKEDATE(2001,31), MAKEDATE(2001,32);

????????-> '2001-01-31', '2001-02-01'

mysql> SELECT MAKEDATE(2001,365), MAKEDATE(2004,365);

????????-> '2001-12-31', '2004-12-30'

mysql> SELECT MAKEDATE(2001,0);

????????-> NULL

MAKETIME(hour,minute,second)?
返回由hour、 minute和second 參數計算得出的時間值。

mysql> SELECT MAKETIME(12,15,30);

????????-> '12:15:30'

MICROSECOND(expr)?
從時間或日期時間表達式expr返回微秒值,其數字范圍從 0到 999999。

mysql> SELECT MICROSECOND('12:00:00.123456');

????????-> 123456

mysql> SELECT MICROSECOND('1997-12-31 23:59:59.000010');

????????-> 10

MINUTE(time)?
返回 time 對應的分鐘數,范圍是從 0 到 59。

mysql> SELECT MINUTE('98-02-03 10:05:03');

????????-> 5

MONTH(date)?
返回date 對應的月份,范圍時從 1 到 12。

mysql> SELECT MONTH('1998-02-03');

????????-> 2

MONTHNAME(date)?
返回date 對應月份的全名。

mysql> SELECT MONTHNAME('1998-02-05');

????????-> 'February '

NOW()?
返回當前日期和時間值,其格式為 'YYYY-MM-DD HH:MM:SS' 或YYYYMMDDHHMMSS , 具體格式取決于該函數是否用在字符串中或數字語境中。

mysql> SELECT NOW();

????????-> '1997-12-15 23:50:26'

mysql> SELECT NOW() + 0;

????????-> 19971215235026

在一個存儲程序或觸發器內, NOW() 返回一個常數時間,該常數指示了該程序或觸發語句開始執行的時間。這同SYSDATE()的運行有所不同。

PERIOD_ADD(P,N)?
添加 N 個月至周期P (格式為YYMM 或YYYYMM),返回值的格式為 YYYYMM。注意周期參數 P 不是日期值。?

mysql> SELECT PERIOD_ADD(9801,2);

????????-> 199803

PERIOD_DIFF(P1,P2)??
返回周期P1和 P2 之間的月份數。P1 和P2 的格式應該為YYMM或YYYYMM。注意周期參數 P1和P2 不是日期值。

mysql> SELECT PERIOD_DIFF(9802,199703);

????????-> 11

QUARTER(date)?
返回date 對應的一年中的季度值,范圍是從 1到 4。

mysql> SELECT QUARTER('98-04-01');

????????-> 2

SECOND(time)?
返回time 對應的秒數, 范圍是從 0到59。

mysql> SELECT SECOND('10:05:03');

????????-> 3

SEC_TO_TIME(seconds)?
返回被轉化為小時、 分鐘和秒數的seconds參數值, 其格式為 'HH:MM:SS' 或HHMMSS,具體格式根據該函數是否用在字符串或數字語境中而定。

mysql> SELECT SEC_TO_TIME(2378);

????????-> '00:39:38'

mysql> SELECT SEC_TO_TIME(2378) + 0;

????????-> 3938

STR_TO_DATE(str,format)?
這是DATE_FORMAT() 函數的倒轉。它獲取一個字符串 str 和一個格式字符串format。若格式字符串包含日期和時間部分,則 STR_TO_DATE()返回一個 DATETIME 值, 若該字符串只包含日期部分或時間部分,則返回一個 DATE 或TIME值。

str所包含的日期、時間或日期時間值應該在format指示的格式中被給定。對于可用在format中的說明符,更多信息請參見 DATE_FORMAT() 函數說明表。 所有其它的字符被逐字獲取,因此不會被解釋。若 str 包含一個非法日期、時間或日期時間值,則 STR_TO_DATE()返回NULL。同時,一個非法值會引起警告。

對日期值部分的范圍檢查在11.3.1節,“DATETIME、DATE和TIMESTAMP類型”有詳細說明。其意義是,例如, 只要具體日期部分的范圍時從 1到 31之間,則允許一個日期中的具體日期部分大于一個月中天數值。并且,允許“零”日期或帶有0值部分的日期。

mysql> SELECT STR_TO_DATE('00/00/0000', '%m/%d/%Y');

????????-> '0000-00-00'

mysql> SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y');

????????-> '2004-04-31'

SUBDATE(date,INTERVAL expr type) SUBDATE(expr,days)?
當被第二個參數的 INTERVAL型式調用時, SUBDATE()和DATE_SUB()的意義相同。對于有關INTERVAL參數的信息, 見有關 DATE_ADD()的討論。

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

????????-> '1997-12-02'

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

????????-> '1997-12-02'

第二個形式允許對days使用整數值。在這些情況下,它被算作由日期或日期時間表達式 expr中提取的天數。

mysql> SELECT SUBDATE('1998-01-02 12:00:00', 31);

????????-> '1997-12-02 12:00:00'

注意不能使用格式 "%X%V" 來將一個 year-week 字符串轉化為一個日期,原因是當一個星期跨越一個月份界限時,一個年和星期的組合不能標示一個唯一的年和月份。若要將year-week轉化為一個日期,則也應指定具體工作日:

mysql> select str_to_date('200442 Monday', '%X%V %W');

-> 2004-10-18

SUBTIME(expr,expr2)?
SUBTIME()從expr 中提取expr2 ,然后返回結果。expr 是一個時間或日期時間表達式,而xpr2 是一個時間表達式。

mysql> SELECT SUBTIME('1997-12-31 23:59:59.999999','1 1:1:1.000002');

????????-> '1997-12-30 22:58:58.999997'

mysql> SELECT SUBTIME('01:00:00.999999', '02:00:00.999998');

????????-> '-00:59:59.999999'

SYSDATE()?
返回當前日期和時間值,格式為'YYYY-MM-DD HH:MM:SS' 或YYYYMMDDHHMMSS, 具體格式根據函數是否用在字符串或數字語境而定。

在一個存儲程序或觸發器中, SYSDATE()返回其執行的時間, 而非存儲成都或觸發語句開始執行的時間。這個NOW()的運作有所不同。

TIME(expr)?
提取一個時間或日期時間表達式的時間部分,并將其以字符串形式返回。

mysql> SELECT TIME('2003-12-31 01:02:03');

????????-> '01:02:03'

mysql> SELECT TIME('2003-12-31 01:02:03.000123');

????????-> '01:02:03.000123'

TIMEDIFF(expr,expr2)?
TIMEDIFF() 返回起始時間 expr 和結束時間expr2 之間的時間。 expr 和expr2 為時間或 date-and-time 表達式,兩個的類型必須一樣。?

mysql> SELECT TIMEDIFF('2000:01:01 00:00:00',

????->?????????????????'2000:01:01 00:00:00.000001');

????????-> '-00:00:00.000001'

mysql> SELECT TIMEDIFF('1997-12-31 23:59:59.000001',

????->?????????????????'1997-12-30 01:01:01.000002');

????????-> '46:58:57.999999'

TIMESTAMP(expr) , TIMESTAMP(expr,expr2)?
對于一個單參數,該函數將日期或日期時間表達式 expr 作為日期時間值返回.對于兩個參數, 它將時間表達式 expr2 添加到日期或日期時間表達式 expr 中,將theresult作為日期時間值返回。

mysql> SELECT TIMESTAMP('2003-12-31');

????????-> '2003-12-31 00:00:00'

mysql> SELECT TIMESTAMP('2003-12-31 12:00:00','12:00:00');

????????-> '2004-01-01 00:00:00'

TIMESTAMPADD(interval,int_expr,datetime_expr)?
將整 型表達式int_expr 添加到日期或日期時間表達式 datetime_expr中。 int_expr 的單位被時間間隔參數給定,該參數必須是以下值的其中一個: FRAC_SECOND、SECOND、 MINUTE、 HOUR、 DAY、 WEEK、 MONTH、 QUARTER或 YEAR。

可使用所顯示的關鍵詞指定Interval值,或使用SQL_TSI_前綴。例如, DAY或SQL_TSI_DAY 都是正確的。

mysql> SELECT TIMESTAMPADD(MINUTE,1,'2003-01-02');

????????-> '2003-01-02 00:01:00'

mysql> SELECT TIMESTAMPADD(WEEK,1,'2003-01-02');

????????-> '2003-01-09'

TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)?
返回日期或日期時間表達式datetime_expr1 和datetime_expr2the 之間的整數差。其結果的單位由interval 參數給出。interval 的法定值同TIMESTAMPADD()函數說明中所列出的相同。

mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');

????????-> 3

mysql> SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01');

????????-> -1

TIME_FORMAT(time,format)?
其使用和 DATE_FORMAT()函數相同, 然而format 字符串可能僅會包含處理小時、分鐘和秒的格式說明符。其它說明符產生一個NULL值或0。

若time value包含一個大于23的小時部分,則 %H 和 %k 小時格式說明符會產生一個大于0..23的通常范圍的值。另一個小時格式說明符產生小時值模數12。

mysql> SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l');

????????-> '100 100 04 04 4'

TIME_TO_SEC(time)?
返回已轉化為秒的time參數。

mysql> SELECT TIME_TO_SEC('22:23:00');

????????-> 80580

mysql> SELECT TIME_TO_SEC('00:39:38');

????????-> 2378

TO_DAYS(date)?
給定一個日期date, 返回一個天數 (從年份0開始的天數 )。

mysql> SELECT TO_DAYS(950501);

????????-> 728779

mysql> SELECT TO_DAYS('1997-10-07');

????????-> 729669

TO_DAYS() 不用于陽歷出現(1582)前的值,原因是當日歷改變時,遺失的日期不會被考慮在內。更多信息請參見12.6節,“MySQL使用什么日歷?”。

請記住, MySQL使用11.3節,“日期和時間類型”中的規則將日期中的二位數年份值轉化為四位。例如,??'1997-10-07'和 '97-10-07' 被視為同樣的日期:

mysql> SELECT TO_DAYS('1997-10-07'), TO_DAYS('97-10-07');

????????-> 729669, 729669

對于1582 年之前的日期(或許在其它地區為下一年 ), 該函數的結果實不可靠的。詳見12.6節,“MySQL使用什么日歷?” 。

UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)?
若無參數調用,則返 回一個Unix timestamp ('1970-01-01 00:00:00' GMT 之后的秒數) 作為無符號整數。若用date 來調用UNIX_TIMESTAMP(),它會將參數值以'1970-01-01 00:00:00' GMT后的秒數的形式返回。date 可以是一個DATE 字符串、一個 DATETIME字符串、一個 TIMESTAMP或一個當地時間的YYMMDD 或YYYMMDD格式的數字。

mysql> SELECT UNIX_TIMESTAMP();

????????-> 882226357

mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');

????????-> 875996580

當 UNIX_TIMESTAMP被用在 TIMESTAMP列時, 函數直接返回內部時戳值,??而不進行任何隱含的 “string-to-Unix-timestamp”轉化。假如你向UNIX_TIMESTAMP()傳遞一個溢出日期,它會返回 0,但請注意只有基本范圍檢查會被履行 (年份從1970 到 2037, 月份從01到12,日期從??01 到31)。

假如你想要減去 UNIX_TIMESTAMP() 列, 你或許希望刪去帶符號整數的結果。更多信息請參見12.8節,“Cast函數和操作符”。

UTC_DATE, UTC_DATE()?
返回當前 UTC日期值,其格式為 'YYYY-MM-DD' 或 YYYYMMDD,具體格式取決于函數是否用在字符串或數字語境中。?

mysql> SELECT UTC_DATE(), UTC_DATE() + 0;

????????-> '2003-08-14', 20030814

UTC_TIME, UTC_TIME()?
返回當前 UTC 值,其格式為??'HH:MM:SS' 或HHMMSS,具體格式根據該函數是否用在字符串或數字語境而定。

mysql> SELECT UTC_TIME(), UTC_TIME() + 0;

????????-> '18:07:53', 180753

UTC_TIMESTAMP, UTC_TIMESTAMP()?
返回當前UTC日期及時間值,格式為 'YYYY-MM-DD HH:MM:SS' 或YYYYMMDDHHMMSS,具體格式根據該函數是否用在字符串或數字語境而定。

mysql> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;

????????-> '2003-08-14 18:08:04', 20030814180804

WEEK(date[,mode])?
該函數返回date 對應的星期數。WEEK() 的雙參數形式允許你指定該星期是否起始于周日或周一, 以及返回值的范圍是否為從0 到53 或從1 到53。若 mode參數被省略,則使用default_week_format系統自變量的值。更多信息請參見5.3.3節,“服務器系統變量”。

以下表說明了mode 參數的工作過程:d

?
?

?第一天??
Mode工作日范圍Week 1?為第一周?...
0周日0-53本年度中有一個周日
1周一0-53本年度中有3天以上
2周日1-53本年度中有一個周日
3周一1-53本年度中有3天以上
4周日0-53本年度中有3天以上
5周一0-53本年度中有一個周一
6周日1-53本年度中有3天以上
7周一1-53本年度中有一個周一
?

mysql> SELECT WEEK('1998-02-20');

????????-> 7

mysql> SELECT WEEK('1998-02-20',0);

????????-> 7

mysql> SELECT WEEK('1998-02-20',1);

????????-> 8

mysql> SELECT WEEK('1998-12-31',1);

????????-> 53

注意,假如有一個日期位于前一年的最后一周, 若你不使用2、3、6或7作為mode 參數選擇,則MySQL返回 0:

mysql> SELECT YEAR('2000-01-01'), WEEK('2000-01-01',0);

????????-> 2000, 0

有人或許會提出意見,認為 MySQL 對于WEEK() 函數應該返回 52 ,原因是給定的日期實際上發生在1999年的第52周。我們決定返回0作為代替的原因是我們希望該函數能返回“給定年份的星期數”。這使得WEEK() 函數在同其它從日期中抽取日期部分的函數結合時的使用更加可靠。

假如你更希望所計算的關于年份的結果包括給定日期所在周的第一天,則應使用 0、2、5或 7 作為mode參數選擇。

mysql> SELECT WEEK('2000-01-01',2);

????????-> 52

作為選擇,可使用 YEARWEEK()函數:

mysql> SELECT YEARWEEK('2000-01-01');

????????-> 199952

mysql> SELECT MID(YEARWEEK('2000-01-01'),5,2);

????????-> '52'

WEEKDAY(date)?
返回date (0 = 周一, 1 = 周二, ... 6 = 周日)對應的工作日索引??weekday index for

mysql> SELECT WEEKDAY('1998-02-03 22:23:00');

????????-> 1

mysql> SELECT WEEKDAY('1997-11-05');

????????-> 2

WEEKOFYEAR(date)?
將該日期的陽歷周以數字形式返回,范圍是從1到53。它是一個兼容度函數,相當于WEEK(date,3)。

mysql> SELECT WEEKOFYEAR('1998-02-20');

????????-> 8

YEAR(date)?
返回date 對應的年份,范圍是從1000到9999。

mysql> SELECT YEAR('98-02-03');

????????-> 1998

YEARWEEK(date), YEARWEEK(date,start)?
返回一個日期對應的年或周。start參數的工作同 start參數對 WEEK()的工作相同。結果中的年份可以和該年的第一周和最后一周對應的日期參數有所不同。

mysql> SELECT YEARWEEK('1987-01-01');

????????-> 198653

注意,周數和WEEK()函數隊可選參數0或 1可能會返回的(0) w有所不同,原因是此時 WEEK() 返回給定年份的語境中的周。

????????-> '1997-10-07'

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450581.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450581.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450581.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

對C語言進行調試的最好方法是什么?

要了解調試程序的最好方法&#xff0c;首先要分析一下調試過程的三個要素&#xff1a;應該用什么工具調試一個程序?用什么辦法才能找出程序中的錯誤?怎樣才能從一開始就避免錯誤?應該用什么工具調試一個程序?有經驗的程序員會使用許多工具來幫助調試程序&#xff0c;包括一…

如何賦值hook定義的變量

1、定義變量 const { tableProps, mutate} useRequest(async (params {}) > {const { success, data, total } await Api.getUserAccountApi({page: params.current || 1,...searchValue,});return {list: success ? data : [],total: success ? total : 0,};},{pagin…

java中的sleep()和wait()的區別

對于sleep()方法&#xff0c;我們首先要知道該方法是屬于Thread類中的。而wait()方法&#xff0c;則是屬于Object類中的。sleep()方法導致了程序暫停執行指定的時間&#xff0c;讓出cpu該其他線程&#xff0c;但是他的監控狀態依然保持者&#xff0c;當指定的時間到了又會自動恢…

Webpack4干貨分享(二),使用loader處理scss,圖片以及轉換JS

轉載請注明出處&#xff1a; 葡萄城官網 &#xff0c;葡萄城為開發者提供專業的開發工具、解決方案和服務&#xff0c;賦能開發者。 原文出處&#xff1a; https://wanago.io/2018/07/16/webpack-4-course-part-two-webpack-4-course-part-two-loaders/今天繼續我們的Webpack 4…

spring-data-jpa 介紹 復雜查詢,包括多表關聯,分頁,排序

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 本篇進行Spring-data-jpa的介紹&#xff0c;幾乎涵蓋該框架的所有方面&#xff0c;在日常的開發當中&#xff0c;基本上能滿足所有需求。…

重寫laravel的request的校驗器

protected function failedValidation(Validator $validator) {$error $validator->errors()->all();throw new HttpResponseException(response()->json([data>[],code>500,msg>$error[0]], 500)); }

如何檢測C語言中的內存漏洞(leak)?

在動態分配的內存單元(即由函數malloc()或ealloc()分配的內存單元)不再使用卻沒有被釋放的情況下&#xff0c;會出現內存漏洞。未釋放內存單元本身并不是一種錯誤&#xff0c;編譯程序不會因此報告出錯&#xff0c;程序也不會因此而立即崩潰。但是&#xff0c;如果不再使用而又…

Oracle中row_number()、rank()、dense_rank() 的區別

link:https://www.cnblogs.com/qiuting/p/7880500.html轉載于:https://www.cnblogs.com/Spring-Rain/p/9716213.html

Vim使用教程(按鍵教程,映射都可以改的,持續更新)

修改映射 tnvim .vimrc 1、spaceft 調出目錄 2、controlh 跳到目錄 3、controll 跳到內容頁 4、spacekn 運行最近一個測試 5、spacekf 運行整個測試文件 6、spacekl 運行最后一個測試 7、sv 分屏 8、sq 退出分屏 9、controlp 搜索功能 10、/搜索內容 N向上…

Alpha 沖刺五

團隊成員 051601135 岳冠宇051604103 陳思孝031602629 劉意晗031602248 鄭智文031602234 王淇會議照片 項目燃盡圖 項目進展 暫無實質性進展。 項目描述 問題困擾&#xff1a; 商品分類出現困惑。交互部分向服務器發送請求失敗&#xff0c;安卓在4.0后對網絡請求有限制要求&…

什么是換碼符(escape character)?

換碼符是用來執行一個命令或一項任務的字符&#xff0c;它們不會被打印到屏幕上。例如&#xff0c;一個換碼符可以是這樣一個字符&#xff0c;它被傳遞給一個設備&#xff0c;告訴計算機屏幕以紅色而不是通常的白色來顯示下一行。這個換碼符將和真正要被設備以紅色來顯示的字符…

java日期工具類DateUtil

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 DateUtil類 [java] view plain copy package com.util; import java.text.SimpleDateFormat; import java.util.ArrayList; import…

Command 傳參的幾種方式

Command可以根據CommandParameter傳參 關鍵代碼 public ICommand SubmitCommand > _submitCommand; private RelayCommand _submitCommand new RelayCommand(new Action<object>(ShowMessage)); private static void ShowMessage(object obj) {MessageBox.Show(obj.T…

phpStorm重構快捷鍵(mac系統、持續更新)

參考 https://learnku.com/laravel/t/5420/your-keyboard-shortcuts-please 1、ctrlaltf 將表達式提取出來使其成為類的屬性&#xff0c;并自動更新引用。 2、ctrlaltp 將表達式變成由參數傳入 3、crtlF6 修改函數簽名&#xff08;函數名&#xff0c;函數參數&#xff09…

python -m xxx.py和python xxx.py的區別

先看下python -m site作用是顯示sys.path的值內容&#xff0c;也就是python搜索模塊的目錄&#xff0c;作用類似于linux下的PATH python -m SimpleHTTPServer 會在sys.path的所有路徑下查找SimpleHTTPServer.py文件&#xff1b; 而python SimpleHTTPServer.py則是在當前查找文…

C語言多維數組與多級指針

多維數組與多級指針也是初學者感覺迷糊的一個地方。超過二維的數組和超過二級的指針其實并不多用。如果能弄明白二維數組與二級指針&#xff0c;那二維以上的也不是什么問題了。所以本節重點討論二維數組與二級指針。一、二維數組 1、假想中的二維數組布局我們前面討論過&…

spring-data-jpa 使用

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 只是記錄下使用方法 &#xff1a; 1. RPC接口 service實現類調用&#xff0c;PageRequest對象會實現分頁、排序。 Overridepublic Obj…

docker的安裝與安裝mysql(mac,centos為例)

一、mac安裝docker 1、去這個網站下載安裝https://www.docker.com/get-started 2、運行docker 運行開啟docker docker run -dp 80:80 docker/getting-started 二、centos8安裝docker 1、安裝docker 下載低版本的 yum install -y docker-ce --nobest 2、安裝擴展 wget http…

配置PPPOE

先配置服務端PPPOE-Server先為路由添加一個賬號為PPP所使用[PPPOE-Server]aaa [PPPOE-Server-aaa]local-user test password cipher 123 //添加一個本地賬號[PPPOE-Server-aaa]local-user test service-type ppp//設置test賬號類型為PPP賬號[PPPOE-Server]ip pool test//添加一…

eclipse棄坑記第一篇之在idea上配置Tomcat環境并創建Javaweb項目的詳細步驟原創

IntelliJ IDEA是一款功能強大的開發工具&#xff0c;在代碼自動提示、重構、J2EE支持、各類版本工具(如git、svn、github)、maven等方面都有很好的應用。 IntelliJ IDEA有免費的社區版和付費的旗艦版。免費版只支持Java等為數不多的語言和基本的IDE特性&#xff0c;旗艦版還支持…