下面的列表中是 SQL 中所有與日期和時間相關(guān)的重要函數(shù)。你所用的 RDBMS 可能會支持更多其他的函數(shù)。下面的列表基于 MySQL 關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。
名稱 | 描述 |
ADDDATE() | 增加日期 |
ADDTIME() | 增加時間 |
CONVERT_TZ() | 將當前時區(qū)更改為另一時區(qū) |
CURDATE() | 返回當前日期 |
CURRENT_DATE(), CURRENT_DATE | CURDATE() 的別名 |
CURRENT_TIME(), CURRENT_TIME | CURTIME() 的別名 |
CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP | NOW() 的別名 |
CURTIME() | 返回當前時間 |
DATE_ADD() | 將兩個日期相加 |
DATE_FORMAT() | 按照指定格式格式化日期 |
DATE_SUB() | 將兩個日期相減 |
DATE() | 從 date 或者 datetime 表達式中提取出日期部分 |
DATEDIFF() | 將兩個日期相減 |
DAY() | DAYOFMONTH() 的別名 |
DAYNAME() | 返回某天在用星期中的名稱 |
DAYOFMONTH() | 返回某天是當月的第幾天 (1-31) |
DAYOFWEEK() | 返回某天是該星期的第幾天 |
DAYOFYEAR() | 返回某天是一年中的第幾天(1-366) |
EXTRACT | 提取日期中的某一部分 |
FROM_DAYS() | 將天數(shù)轉(zhuǎn)換為日期 |
FROM_UNIXTIME() | 將某個日期格式化為 UNIX 時間戳 |
HOUR() | 提取小時 |
LAST_DAY | 返回參數(shù)日期所在月份的最后一天 |
LOCALTIME(), LOCALTIME | NOW() 的別名 |
LOCALTIMESTAMP, LOCALTIMESTAMP() | NOW() 的別名 |
MAKEDATE() | 利用年份和某天在該年所處的天數(shù)來創(chuàng)建日期 |
MAKETIME | MAKETIME() |
MICROSECOND() | 由參數(shù)返回微秒 |
MINUTE() | 由參數(shù)返回分鐘 |
MONTH() | 返回日期參數(shù)的月份 |
MONTHNAME() | 返回月份的名字 |
NOW() | 返回當前日期和時間 |
PERIOD_ADD() | 向年月格式的日期數(shù)據(jù)之間添加一段時間 |
PERIOD_DIFF() | 返回兩個年月格式的日期數(shù)據(jù)之間的月份數(shù) |
QUARTER() | 返回日期參數(shù)所在的季度 |
SEC_TO_TIME() | 將秒數(shù)轉(zhuǎn)換為 'HH:MM:SS' 格式 |
SECOND() | 返回參數(shù)中的秒數(shù) (0-59) |
STR_TO_DATE() | 將字符串轉(zhuǎn)換為日期數(shù)據(jù) |
SUBDATE() | 以三個參數(shù)調(diào)用的時候是 DATE_SUB() 的同義詞 |
SUBTIME() | 減去時間 |
SYSDATE() | 返回函數(shù)執(zhí)行的時的時刻 |
TIME_FORMAT() | 格式化時間 |
TIME_TO_SEC() | 將時間參數(shù)轉(zhuǎn)換為秒數(shù) |
TIME() | 返回參數(shù)表達式中的時間部分 |
TIMEDIFF() | 將兩個時間相減 |
TIMESTAMP() | 只有一個參數(shù)時,該函數(shù)返回 date 或者 datetime 表達式。當有兩個參數(shù)時,將兩個參數(shù)相加。 |
TIMESTAMPADD() | 在 datetime 表達式上加上一段時間 |
TIMESTAMPDIFF() | 在 datetime 表達式上減去一段時間 |
TO_DAYS() | 將日期參數(shù)轉(zhuǎn)換為天數(shù) |
UNIX_TIMESTAMP() | 返回 UNIX 時間戳 |
UTC_DATE() | 返回當前 UTC 日期 |
UTC_TIME() | 返回當前 UTC 時間 |
UTC_TIMESTAMP() | 返回當前 UTC 日期和時間 |
WEEK() | 返回參數(shù)的星期數(shù) |
WEEKDAY() | 返回日期參數(shù)時一個星期中的第幾天 |
WEEKOFYEAR() | 返回日期參數(shù)是日歷上的第幾周 (1-53) |
YEAR() | 返回日期參數(shù)中的年份 |
YEARWEEK() | 返回年份和星期 |
如果調(diào)用時第二個參數(shù)為 INTERVAL 形式的話,ADDDATE() 就是 DATE_ADD() 的同義詞。同樣的情況下,SUBDATE() 是 DATE_SUB() 的同義詞。有關(guān) INTERVAL 單位參數(shù)的信息,見有關(guān) DATE_ADD() 的討論。
mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
+---------------------------------------------------------+
| DATE_ADD('1998-01-02', INTERVAL 31 DAY) |
+---------------------------------------------------------+
| 1998-02-02 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY);
+---------------------------------------------------------+
| ADDDATE('1998-01-02', INTERVAL 31 DAY) |
+---------------------------------------------------------+
| 1998-02-02 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
如果調(diào)用時第二個參數(shù)為天數(shù)形式的話,則 MySQL 會將其作為整數(shù)加到 expr 上。
mysql> SELECT ADDDATE('1998-01-02', 31);
+---------------------------------------------------------+
| DATE_ADD('1998-01-02', INTERVAL 31 DAY) |
+---------------------------------------------------------+
| 1998-02-02 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
ADDTIME() 將 expr2 加到 expr1 上,并返回結(jié)果。expr1 為 time 或者 datetime 表達式,expr2 為 time 表達式。
mysql> SELECT ADDTIME('1997-12-31 23:59:59.999999','1 1:1:1.000002');
+---------------------------------------------------------+
| DATE_ADD('1997-12-31 23:59:59.999999','1 1:1:1.000002') |
+---------------------------------------------------------+
| 1998-01-02 01:01:01.000001 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
該函數(shù)將 datetime 類型的值 dt 的時區(qū)從 from_dt 轉(zhuǎn)換為 to_dt,并返回結(jié)果。如果參數(shù)無效,則函數(shù)返回 NULL。
mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
+---------------------------------------------------------+
| CONVERT_TZ('2004-01-01 12:00:00','GMT','MET') |
+---------------------------------------------------------+
| 2004-01-01 13:00:00 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');
+---------------------------------------------------------+
| CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00') |
+---------------------------------------------------------+
| 2004-01-01 22:00:00 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
以 'YYYY-MM-DD'(字符串) 或者 YYYYMMDD(數(shù)值) 的形式返回當前日期, 具體形式取決于函數(shù)處于字符串還是數(shù)值型的上下文環(huán)境中。
mysql> SELECT CURDATE();
+---------------------------------------------------------+
| CURDATE() |
+---------------------------------------------------------+
| 1997-12-15 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT CURDATE() + 0;
+---------------------------------------------------------+
| CURDATE() + 0 |
+---------------------------------------------------------+
| 19971215 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
CURRENT_DATE 和 CURRENT_DATE() 是 CURDATE() 的別名。
以 'HH:MM:SS'(字符串) 或者 HHMMSS(數(shù)值) 的形式返回當前時間, 具體形式取決于函數(shù)處于字符串還是數(shù)值型的上下文環(huán)境中。該函數(shù)按照當前時區(qū)來表示返回值。
mysql> SELECT CURTIME();
+---------------------------------------------------------+
| CURTIME() |
+---------------------------------------------------------+
| 23:50:26 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT CURTIME() + 0;
+---------------------------------------------------------+
| CURTIME() + 0 |
+---------------------------------------------------------+
| 235026 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
CURRENT_TIME 和 CURRENT_TIME() 是 CURTIME() 的別名。
CURRENT_TIMESTAMP 和 CURRENT_TIMESTAMP() 是 NOW() 的別名。
提取 date 表達式或者 datetime 表達式中的日期部分。
mysql> SELECT DATE('2003-12-31 01:02:03');
+---------------------------------------------------------+
| DATE('2003-12-31 01:02:03') |
+---------------------------------------------------------+
| 2003-12-31 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
DATEDIFF() 返回 expr1 和 expr2 的差,以天數(shù)的形式表示。expr1 和 expr2 應為 date 或者 datetime 表達式。只有參數(shù)的日期部分參與了計算。
mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');
+---------------------------------------------------------+
| DATEDIFF('1997-12-31 23:59:59','1997-12-30') |
+---------------------------------------------------------+
| 1 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
這些函數(shù)進行有關(guān)日期的算術(shù)運算。date 是一個 DATETIME 或者 DATE 類型的值,指明了起始時間。expr 表達式則是 date 要增加或者減去的時間間隔。expr 是一個字符串,可以以 '-' 開始來表示負時間區(qū)間。 unit 是一個關(guān)鍵詞,指明了expr 的單位。
INTERVAL 關(guān)鍵字和 unit(單位)指示符不區(qū)分大小寫。
下表列出了對于每種單位,expr 應有的形式。
unit 值 | expr 應有的格式 |
MICROSECOND | 微秒 |
SECOND | 秒 |
MINUTE | 分鐘 |
HOUR | 小時 |
DAY | 天 |
WEEK | 星期 |
MONTH | 月 |
QUARTER | 季度 |
YEAR | 年 |
SECOND_MICROSECOND | '秒.微秒' |
MINUTE_MICROSECOND | '分.微秒' |
MINUTE_SECOND | '分:秒' |
HOUR_MICROSECOND | '小時.微秒' |
HOUR_SECOND | '時:分:秒' |
HOUR_MINUTE | '時:分' |
DAY_MICROSECOND | '天.微秒' |
DAY_SECOND | '天 時:分:秒' |
DAY_MINUTE | '天 時:分' |
DAY_HOUR | '天 時' |
YEAR_MONTH | '年-月' |
QUARTER 和 WEEK 自 MySQL 5.0.0 起受到支持。
mysql> SELECT DATE_ADD('1997-12-31 23:59:59',
-> INTERVAL '1:1' MINUTE_SECOND);
+---------------------------------------------------------+
| DATE_ADD('1997-12-31 23:59:59', INTERVAL... |
+---------------------------------------------------------+
| 1998-01-01 00:01:00 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1 HOUR);
+---------------------------------------------------------+
| DATE_ADD('1999-01-01', INTERVAL 1 HOUR) |
+---------------------------------------------------------+
| 1999-01-01 01:00:00 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
根據(jù)格式字符串對日期值進行格式化。
下面這些占位符可以用在格式字符串中,'%' 必須出現(xiàn)在特定的格式字符之前。
占位符 | 描述 |
%a | 簡寫的星期名稱(Sun..Sat) |
%b | 簡寫的月份名稱 (Jan..Dec) |
%c | 月份,以數(shù)值形式表示(0..12) |
%D | 月份中的日期,帶有英文后綴(0th,1st,2nd,3rd 等等) |
%d | 月份中的日期,以數(shù)值表示 (00..31) |
%e | 月份中的日期,以數(shù)值表示 (0..31) |
%f | 微秒(000000..999999) |
%H | 小時(00..23) |
%h | 小時(01..12) |
%I | 小時(01..12) |
%i | 分鐘,以數(shù)值表示(00..59) |
%j | 一年中的第幾天(001..366) |
%k | 小時(0..23) |
%l | 小時(1..12) |
%M | 月份的名稱(January..December) |
%m | 月份,以數(shù)值形式表示(00..12) |
%p | AM 或者 PM |
%r | 時間,12 小時制(hh:mm:ss followed by AM or 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 | 一周中日期的名稱(Sunday..Saturday) |
%w | 一周中的第幾天(0=Sunday..6=Saturday) |
%X | 以星期日為第一天的周所處的年份,四位數(shù)字表示;同 %V 一起使用。 |
%x | 以星期一為第一天的周所處的年份,四位數(shù)字表示;同 %v 一起使用。 |
%Y | 年份,四位數(shù)字表示。 |
%y | 年份,兩位數(shù)字表示。 |
%% | % 字面值 |
%x | x,針對任何以上沒有列出的情況。 |
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
+---------------------------------------------------------+
| DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y') |
+---------------------------------------------------------+
| Saturday October 1997 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00'
-> '%H %k %I %r %T %S %w');
+---------------------------------------------------------+
| DATE_FORMAT('1997-10-04 22:23:00....... |
+---------------------------------------------------------+
| 22 22 10 10:23:00 PM 22:23:00 00 6 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
同 DATE_ADD() 函數(shù)相似。
DAY() 是 DAYOFMONTH() 的別名。
返回 date 在星期中的名稱。
mysql> SELECT DAYNAME('1998-02-05');
+---------------------------------------------------------+
| DAYNAME('1998-02-05') |
+---------------------------------------------------------+
| Thursday |
+---------------------------------------------------------+
1 row in set (0.00 sec)
返回 date 是當月的第幾天,范圍為 0 到 31。
mysql> SELECT DAYOFMONTH('1998-02-03');
+---------------------------------------------------------+
| DAYOFMONTH('1998-02-03') |
+---------------------------------------------------------+
| 3 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
返回 date 是其所在星期的第幾天(1 = Sunday, 2 = Monday,.., 7 = Saturday),這里一星期中日期的名稱與數(shù)字的對應關(guān)系符合 ODBC 標準。
mysql> SELECT DAYOFWEEK('1998-02-03');
+---------------------------------------------------------+
|DAYOFWEEK('1998-02-03') |
+---------------------------------------------------------+
| 3 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
返回 date 是當年的第幾天,范圍為 1 到 366。
mysql> SELECT DAYOFYEAR('1998-02-03');
+---------------------------------------------------------+
| DAYOFYEAR('1998-02-03') |
+---------------------------------------------------------+
| 34 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
EXTRACT() 與 DATE_ADD() 和 DATE_SUB() 使用相同的表示單位的占位符,其作用是提取日期值中相應的組成部分,而不是進行日期運算。
mysql> SELECT EXTRACT(YEAR FROM '1999-07-02');
+---------------------------------------------------------+
| EXTRACT(YEAR FROM '1999-07-02') |
+---------------------------------------------------------+
| 1999 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT EXTRACT(YEAR_MONTH FROM '1999-07-02 01:02:03');
+---------------------------------------------------------+
| EXTRACT(YEAR_MONTH FROM '1999-07-02 01:02:03') |
+---------------------------------------------------------+
| 199907 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
給出天數(shù) N,返回 DATE 值。
mysql> SELECT FROM_DAYS(729669);
+---------------------------------------------------------+
| FROM_DAYS(729669) |
+---------------------------------------------------------+
| 1997-10-07 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
在使用 FROM_DAYS() 處理比較老的日期的時候應當特別小心,該函數(shù)不適用于格里高利歷誕生(1582)之前的日期。
返回 UNIX 時間戳對應的日期值,根據(jù)函數(shù)所處的上下文環(huán)境不同,返回值得格式也不同,字符串上下文返回格式為 'YYYY-MM-DD HH:MM:SS',數(shù)值型上下文返回格式則為 YYYYMMDDHHMMSS。返回值的時區(qū)為系統(tǒng)當前時區(qū)。UNIX 時間戳是一種系統(tǒng)內(nèi)部時間表示,例如 UNIX_TIMESTAMP() 的返回值。
如果給定格式的話,返回結(jié)果將會根據(jù)格式字符串進行格式化,其規(guī)則同 DATE_FORMAT() 函數(shù)。
mysql> SELECT FROM_UNIXTIME(875996580);
+---------------------------------------------------------+
| FROM_UNIXTIME(875996580) |
+---------------------------------------------------------+
| 1997-10-04 22:23:00 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
返回時間值的小時部分。對于一天中的時間來說,返回值的范圍為 0 到 23。不過,TIME 類型的值可以大得多,所以 HOUR 函數(shù)可以返回比 23 大的值。
mysql> SELECT HOUR('10:05:03');
+---------------------------------------------------------+
| HOUR('10:05:03') |
+---------------------------------------------------------+
| 10 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
返回 date 或者 datetime 值所在月份的最后一天。如果參數(shù)無效的話,返回 NULL。
mysql> SELECT LAST_DAY('2003-02-05');
+---------------------------------------------------------+
| LAST_DAY('2003-02-05') |
+---------------------------------------------------------+
| 2003-02-28 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
LOCALTIME 和 LOCALTIME() 是 NOW() 的別名。
LOCALTIMESTAMP 和 LOCALTIMESTAMP() 是 NOW() 的別名。
給定年份和(某天在一年中)的天數(shù),返回對應的日期值。天數(shù)必須大于 0,否則返回值為 NULL。
mysql> SELECT MAKEDATE(2001,31), MAKEDATE(2001,32);
+---------------------------------------------------------+
| MAKEDATE(2001,31), MAKEDATE(2001,32) |
+---------------------------------------------------------+
| '2001-01-31', '2001-02-01' |
+---------------------------------------------------------+
1 row in set (0.00 sec)
根據(jù)參數(shù)給出的時、分、秒,返回對應的時間值。
mysql> SELECT MAKETIME(12,15,30);
+---------------------------------------------------------+
| MAKETIME(12,15,30) |
+---------------------------------------------------------+
| '12:15:30' |
+---------------------------------------------------------+
1 row in set (0.00 sec)
根據(jù) time 或者 datetime 表達式 expr,返回微秒數(shù),結(jié)果在 0 到 999999 之間。
mysql> SELECT MICROSECOND('12:00:00.123456');
+---------------------------------------------------------+
| MICROSECOND('12:00:00.123456') |
+---------------------------------------------------------+
| 123456 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
返回時間型值中的分鐘部分,范圍為 0 到 59。
mysql> SELECT MINUTE('98-02-03 10:05:03');
+---------------------------------------------------------+
| MINUTE('98-02-03 10:05:03') |
+---------------------------------------------------------+
| 5 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
返回日期型值中的月份,范圍為 0 到 12。
mysql> SELECT MONTH('1998-02-03')
+---------------------------------------------------------+
| MONTH('1998-02-03') |
+---------------------------------------------------------+
| 2 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
返回日期型值所處月份的全名。
mysql> SELECT MONTHNAME('1998-02-05');
+---------------------------------------------------------+
| MONTHNAME('1998-02-05') |
+---------------------------------------------------------+
| February |
+---------------------------------------------------------+
1 row in set (0.00 sec)
返回當前的日期和時間,結(jié)果的格式為 'YYYY-MM-DD HH:MM:SS' 或者 YYYYMMDDHHMMSS,如果函數(shù)上下文環(huán)境為字符型,則返回前者,否則如果函數(shù)處于數(shù)值型的上下文環(huán)境,則返回后者。返回值的時區(qū)為系統(tǒng)當前時區(qū)。
mysql> SELECT NOW();
+---------------------------------------------------------+
| NOW() |
+---------------------------------------------------------+
| 1997-12-15 23:50:26 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
在時間 P(格式為 YYMM 或者 YYYYMM)上加上 N 個月,結(jié)果格式為 YYYYMM。注意,時間參數(shù) P 并不是日期型值。
mysql> SELECT PERIOD_ADD(9801,2);
+---------------------------------------------------------+
| PERIOD_ADD(9801,2) |
+---------------------------------------------------------+
| 199803 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
返回時間 P1 和 P2 之間相差的月份。 P1 和 P2 的格式應為 YYMM 或者 YYYYMM。注意I,P1 和 P2 不是日期型值。
mysql> SELECT PERIOD_DIFF(9802,199703);
+---------------------------------------------------------+
| PERIOD_DIFF(9802,199703) |
+---------------------------------------------------------+
| 11 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
返回日期型值 date 所處的季度值,范圍為 1 到 4。
mysql> SELECT QUARTER('98-04-01');
+---------------------------------------------------------+
| QUARTER('98-04-01') |
+---------------------------------------------------------+
| 2 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
返回時間型值中秒的部分,范圍為 0 到 59。
mysql> SELECT SECOND('10:05:03');
+---------------------------------------------------------+
| SECOND('10:05:03') |
+---------------------------------------------------------+
| 3 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
將參數(shù)中的秒數(shù)轉(zhuǎn)換為時分秒的格式 'HH:MM:SS' 或者 HHMMSS,如果函數(shù)所處的上下文為字符串型,則返回前者,否則如果上下文環(huán)境為數(shù)值型,則返回后者。
這是 DATE_FORMATE() 函數(shù)的逆函數(shù),其參數(shù)為表示時間和日期的字符串 str 和一個格式字符串 format。如果格式字符串中既有日期又有時間,則 STR_TO_DATE() 返回 DATETIME() 型的值,否則返回日期型(DATE)或者時間型(TIME)的值。
mysql> SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y');
+---------------------------------------------------------+
| STR_TO_DATE('04/31/2004', '%m/%d/%Y') |
+---------------------------------------------------------+
| 2004-04-31 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
當?shù)诙€參數(shù)為 INTERVAL 形式時,SUBDATE() 就是 DATE_SUB() 的別名。INTERVAL 參數(shù)中單位的信息,請見有關(guān) DATE_ADD() 的討論。
mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
+---------------------------------------------------------+
| DATE_SUB('1998-01-02', INTERVAL 31 DAY) |
+---------------------------------------------------------+
| 1997-12-02 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT SUBDATE('1998-01-02', INTERVAL 31 DAY);
+---------------------------------------------------------+
| SUBDATE('1998-01-02', INTERVAL 31 DAY) |
+---------------------------------------------------------+
| 1997-12-02 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
SUBTIME() 返回 expr1-expr2,結(jié)果的格式與 expr1 相同。expr1 是一個時間型(time)或者 datetime 型的表達式,expr2 是時間型值。
返回當前的日期和時間,格式為 'YYYY-MM-DD HH:MM:SS' 或 YYYYMMDDHHMMSS,如果函數(shù)所處的上下文環(huán)境為字符串,則返回前者,否則如果上下文環(huán)境為數(shù)值型,則返回后者。
mysql> SELECT SYSDATE();
+---------------------------------------------------------+
| SYSDATE() |
+---------------------------------------------------------+
| 2006-04-12 13:47:44 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
提取時間型或者 datetime 型表達式 expr 中的時間部分,返回結(jié)果為字符串。
mysql> SELECT TIME('2003-12-31 01:02:03');
+---------------------------------------------------------+
| TIME('2003-12-31 01:02:03') |
+---------------------------------------------------------+
| 01:02:03 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
TIMEDIFF() 返回 expr1-expr2,結(jié)果為時間型值。expr1 和 expr2 可以為時間型或者 datetime 型表達式,不過二者必須為相同類型。
mysql> SELECT TIMEDIFF('1997-12-31 23:59:59.000001',
-> '1997-12-30 01:01:01.000002');
+---------------------------------------------------------+
| TIMEDIFF('1997-12-31 23:59:59.000001'..... |
+---------------------------------------------------------+
| 46:58:57.999999 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
只有一個參數(shù)的時候,該函數(shù)由日期型或者 datetime 型表達式返回一個 datetime 型值。有兩個參數(shù)的時候,該函數(shù)將 expr2 加到日期型或 datetime 型值 expr1 上,并返回 datetime 型的結(jié)果。
mysql> SELECT TIMESTAMP('2003-12-31');
+---------------------------------------------------------+
| TIMESTAMP('2003-12-31') |
+---------------------------------------------------------+
| 2003-12-31 00:00:00 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
將整數(shù)型的表達式 interval 加到日期型或者 datetime 型表達式 datetime_expr 上。單位由 unit 參數(shù)給出,其取值應為以下幾種中的一種:FRAC_SECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER 或者 YEAR。
單位 unit 可以為上述關(guān)鍵字中的一個,也可以添加一個 SQLTSI 前綴,例如 DAY 和 SQL_TSI_DAY 都是合法的。
mysql> SELECT TIMESTAMPADD(MINUTE,1,'2003-01-02');
+---------------------------------------------------------+
| TIMESTAMPADD(MINUTE,1,'2003-01-02') |
+---------------------------------------------------------+
| 2003-01-02 00:01:00 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
返回日期型或者 datetime 型表達式 datetime_expr1 和 datetime_expr2 的差。結(jié)果的單位由 unit 參數(shù)給出,unit 的取值規(guī)定同 TIMESTAMPADD() 函數(shù)。
mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');
+---------------------------------------------------------+
| TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01') |
+---------------------------------------------------------+
| 3 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
該函數(shù)使用起來類似 DATE_FORMAT() 函數(shù),但是格式字符串 format 中只能有與小時、分鐘和秒有關(guān)的那些占位符。
如果時間型值的小時部分大于 23,則 %H 和 %k 格式占位符將會產(chǎn)生一個大于通常的 0-23 的值,其他與小時有關(guān)的占位符則會返回小時值除以 12 后的余數(shù)(modulo 12)。
mysql> SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l');
+---------------------------------------------------------+
| TIME_FORMAT('100:00:00', '%H %k %h %I %l') |
+---------------------------------------------------------+
| 100 100 04 04 4 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
將時間型值轉(zhuǎn)換為秒。
mysql> SELECT TIME_TO_SEC('22:23:00');
+---------------------------------------------------------+
| TIME_TO_SEC('22:23:00') |
+---------------------------------------------------------+
| 80580 |
+---------------------------------------------------------+
1 row in set (0.00 sec)、
給定日期型值 date,返回天數(shù)(自公元 0 年以來的天數(shù))。
mysql> SELECT TO_DAYS(950501);
+---------------------------------------------------------+
| TO_DAYS(950501) |
+---------------------------------------------------------+
| 728779 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
不帶任何參數(shù)時,該函數(shù)返回一個 unsigned integer 型的 UNIX 時間戳(自 '1970-01-01 00:00:00' UTC 以來的秒數(shù))。如果有一個參數(shù) date 的話,該函數(shù)返回自 '1970-01-01 00:00:00' UTC 至 date 的秒數(shù)。date 可以是日期型的字符串、DATETIME 型的字符串、時間戳或者 YYMMDD 或 YYYYMMDD 格式的數(shù)字。
mysql> SELECT UNIX_TIMESTAMP();
+---------------------------------------------------------+
| UNIX_TIMESTAMP() |
+---------------------------------------------------------+
| 882226357 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');
+---------------------------------------------------------+
| UNIX_TIMESTAMP('1997-10-04 22:23:00') |
+---------------------------------------------------------+
| 875996580 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
返回當前 UTC 日期,格式為 'YYYY-MM-DD' 或者 YYYYMMDD,如果函數(shù)所處的上下文環(huán)境為字符串,則返回前者,否則如果上下文環(huán)境為數(shù)值型的,則返回后者。
mysql> SELECT UTC_DATE(), UTC_DATE() + 0;
+---------------------------------------------------------+
| UTC_DATE(), UTC_DATE() + 0 |
+---------------------------------------------------------+
| 2003-08-14, 20030814 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
返回當前 UTC 時間,格式為 'HH:MM:SS' 或者 HHMMSS,如果函數(shù)所處的上下文環(huán)境為字符串,則返回前者,否則如果上下文環(huán)境為數(shù)值型的,則返回后者。
mysql> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;
+---------------------------------------------------------+
| UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0 |
+---------------------------------------------------------+
| 2003-08-14 18:08:04, 20030814180804 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
該函數(shù)將返回 date 所在的周是當年的第幾周。兩個參數(shù)的 WEEK() 函數(shù)的使你能夠指明一周起始于周日還是周一,以及返回值的范圍應該是 0 到 53,還是 1 到 53。如果 mode 參數(shù)被忽略,則將使用 default_week_format 系統(tǒng)變量。
Mode | 一周的第一天 | 范圍 | 周 1 是第一周 |
0 | Sunday | 0-53 | 該年包括一個星期天 |
1 | Monday | 0-53 | 該年包含超過 3 天 |
2 | Sunday | 1-53 | 該年包括一個星期天 |
3 | Monday | 1-53 | 該年包含超過 3 天 |
4 | Sunday | 0-53 | 該年包含超過 3 天 |
5 | Monday | 0-53 | 該年包括一個星期一 |
6 | Sunday | 1-53 | 該年包含超過 3 天 |
7 | Monday | 1-53 | 該年包括一個星期一 |
mysql> SELECT WEEK('1998-02-20');
+---------------------------------------------------------+
| WEEK('1998-02-20') |
+---------------------------------------------------------+
| 7 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
返回 date 是其所在星期的第幾天 (0 = Monday, 1 = Tuesday, . 6 = Sunday)。
mysql> SELECT WEEKDAY('1998-02-03 22:23:00');
+---------------------------------------------------------+
| WEEKDAY('1998-02-03 22:23:00') |
+---------------------------------------------------------+
| 1 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
返回 date 所在的周是當年的第幾周,范圍從 1 到 53. WEEKOFYEAR() 是一個兼容性函數(shù),其功能同 WEEK(date, 3)相同。
mysql> SELECT WEEKOFYEAR('1998-02-20');
+---------------------------------------------------------+
| WEEKOFYEAR('1998-02-20') |
+---------------------------------------------------------+
| 8 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
返回 date 的年份部分,范圍為 1000 到 9999,對于日期 0 則返回 0。
mysql> SELECT YEAR('98-02-03');
+---------------------------------------------------------+
| YEAR('98-02-03') |
+---------------------------------------------------------+
| 1998 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
返回 date 所在的年份和周數(shù)。mode 參數(shù)意義與 WEEK() 函數(shù)的完全一樣。對于一年中的第一周和最后一周來說,結(jié)果中的年份可能會和 date 參數(shù)中的年份不同。
mysql> SELECT YEARWEEK('1987-01-01');
+---------------------------------------------------------+
| YEAR('98-02-03')YEARWEEK('1987-01-01') |
+---------------------------------------------------------+
| 198653 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
注意,這里的周數(shù)同 WEEK() 返回的不同,因為 WEEK() 函數(shù)的返回值在給定年份的的上下文環(huán)境中得出。
更多建議: