鍍金池/ 教程/ 數(shù)據(jù)庫/ SQL 日期函數(shù)
SQL AND 和 OR 連接運(yùn)算符
SQL 刪除數(shù)據(jù)庫
SQL 使用序列
SQL CONCAT 函數(shù)
SQL 使用視圖
SQL SELECT 語句
SQL 別名
SQL MAX 函數(shù)
SQL 創(chuàng)建表
SQL NULL 值
SQL 數(shù)據(jù)類型
SQL RAND 函數(shù)
SQL 臨時表
SQL INSERT 語句
SQL ALTER TABLE 命令
SQL 關(guān)系型數(shù)據(jù)庫管理系統(tǒng)
SQL SUM 函數(shù)
SQL 子查詢
SQL UPDATE 語句
SQL 表達(dá)式
SQL 操作符
SQL ORDER BY 子句
SQL WHERE 子句
SQL 對結(jié)果進(jìn)行排序
SQL 注入
SQL AVG 函數(shù)
SQL 選擇數(shù)據(jù)庫,USE 語句
SQL 克隆數(shù)據(jù)表
SQL COUNT 函數(shù)
SQL 語法
SQL DELETE 語句
SQL 約束
SQL 刪除表
SQL TOP、LIMIT 和 ROWNUM 子句
SQL 日期函數(shù)
SQL TRUNCATE TABLE 命令
SQL DISTINCT 關(guān)鍵字
SQL 處理重復(fù)數(shù)據(jù)
SQL 使用連接
SQL 索引
SQL 事務(wù)
SQL GROUP BY 子句
SQL HAVING 子句
SQL MIN 函數(shù)
SQL 概覽
SQL SQRT 函數(shù)
SQL LIKE 子句
SQL 通配符
SQL UNION 子句
SQL 數(shù)據(jù)庫
SQL 創(chuàng)建數(shù)據(jù)庫

SQL 日期函數(shù)

下面的列表中是 SQL 中所有與日期和時間相關(guān)的重要函數(shù)。你所用的 RDBMS 可能會支持更多其他的函數(shù)。下面的列表基于 MySQL 關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。

名稱 描述
ADDDATE() 增加日期
ADDTIME() 增加時間
CONVERT_TZ() 將當(dāng)前時區(qū)更改為另一時區(qū)
CURDATE() 返回當(dāng)前日期
CURRENT_DATE(), CURRENT_DATE CURDATE() 的別名
CURRENT_TIME(), CURRENT_TIME CURTIME() 的別名
CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP NOW() 的別名
CURTIME() 返回當(dāng)前時間
DATE_ADD() 將兩個日期相加
DATE_FORMAT() 按照指定格式格式化日期
DATE_SUB() 將兩個日期相減
DATE() 從 date 或者 datetime 表達(dá)式中提取出日期部分
DATEDIFF() 將兩個日期相減
DAY() DAYOFMONTH() 的別名
DAYNAME() 返回某天在用星期中的名稱
DAYOFMONTH() 返回某天是當(dāng)月的第幾天 (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() 返回當(dāng)前日期和時間
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ù)表達(dá)式中的時間部分
TIMEDIFF() 將兩個時間相減
TIMESTAMP() 只有一個參數(shù)時,該函數(shù)返回 date 或者 datetime 表達(dá)式。當(dāng)有兩個參數(shù)時,將兩個參數(shù)相加。
TIMESTAMPADD() 在 datetime 表達(dá)式上加上一段時間
TIMESTAMPDIFF() 在 datetime 表達(dá)式上減去一段時間
TO_DAYS() 將日期參數(shù)轉(zhuǎn)換為天數(shù)
UNIX_TIMESTAMP() 返回 UNIX 時間戳
UTC_DATE() 返回當(dāng)前 UTC 日期
UTC_TIME() 返回當(dāng)前 UTC 時間
UTC_TIMESTAMP() 返回當(dāng)前 UTC 日期和時間
WEEK() 返回參數(shù)的星期數(shù)
WEEKDAY() 返回日期參數(shù)時一個星期中的第幾天
WEEKOFYEAR() 返回日期參數(shù)是日歷上的第幾周 (1-53)
YEAR() 返回日期參數(shù)中的年份
YEARWEEK() 返回年份和星期

ADDDATE(date, INTERVAL expr unit), ADDDATE(expr, days)

如果調(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(expr1,expr2)

ADDTIME() 將 expr2 加到 expr1 上,并返回結(jié)果。expr1 為 time 或者 datetime 表達(dá)式,expr2 為 time 表達(dá)式。

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)

CONVERT_TZ(dt,from_tz,to_tz)

該函數(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)

CURDATE()

以 'YYYY-MM-DD'(字符串) 或者 YYYYMMDD(數(shù)值) 的形式返回當(dāng)前日期, 具體形式取決于函數(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 and CURRENT_DATE()

CURRENT_DATE 和 CURRENT_DATE() 是 CURDATE() 的別名。

CURTIME()

以 'HH:MM:SS'(字符串) 或者 HHMMSS(數(shù)值) 的形式返回當(dāng)前時間, 具體形式取決于函數(shù)處于字符串還是數(shù)值型的上下文環(huán)境中。該函數(shù)按照當(dāng)前時區(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 and CURRENT_TIME()

CURRENT_TIME 和 CURRENT_TIME() 是 CURTIME() 的別名。

CURRENT_TIMESTAMP and CURRENT_TIMESTAMP()

CURRENT_TIMESTAMP 和 CURRENT_TIMESTAMP() 是 NOW() 的別名。

DATE(expr)

提取 date 表達(dá)式或者 datetime 表達(dá)式中的日期部分。

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)

DATEDIFF() 返回 expr1 和 expr2 的差,以天數(shù)的形式表示。expr1 和 expr2 應(yīng)為 date 或者 datetime 表達(dá)式。只有參數(shù)的日期部分參與了計(jì)算。

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)

DATE_ADD(date,INTERVAL expr unit), DATE_SUB(date,INTERVAL expr unit)

這些函數(shù)進(jìn)行有關(guān)日期的算術(shù)運(yùn)算。date 是一個 DATETIME 或者 DATE 類型的值,指明了起始時間。expr 表達(dá)式則是 date 要增加或者減去的時間間隔。expr 是一個字符串,可以以 '-' 開始來表示負(fù)時間區(qū)間。 unit 是一個關(guān)鍵詞,指明了expr 的單位。

INTERVAL 關(guān)鍵字和 unit(單位)指示符不區(qū)分大小寫。

下表列出了對于每種單位,expr 應(yīng)有的形式。

unit 值 expr 應(yīng)有的格式
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)

DATE_FORMAT(date,format)

根據(jù)格式字符串對日期值進(jìn)行格式化。

下面這些占位符可以用在格式字符串中,'%' 必須出現(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_SUB(date,INTERVAL expr unit)

同 DATE_ADD() 函數(shù)相似。

DAY(date)

DAY() 是 DAYOFMONTH() 的別名。

DAYNAME(date)

返回 date 在星期中的名稱。

mysql> SELECT DAYNAME('1998-02-05');
+---------------------------------------------------------+
| DAYNAME('1998-02-05')                                   |
+---------------------------------------------------------+
| Thursday                                                |
+---------------------------------------------------------+
1 row in set (0.00 sec)

DAYOFMONTH(date)

返回 date 是當(dāng)月的第幾天,范圍為 0 到 31。

mysql> SELECT DAYOFMONTH('1998-02-03');
+---------------------------------------------------------+
| DAYOFMONTH('1998-02-03')                                |
+---------------------------------------------------------+
| 3                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

DAYOFWEEK(date)

返回 date 是其所在星期的第幾天(1 = Sunday, 2 = Monday,.., 7 = Saturday),這里一星期中日期的名稱與數(shù)字的對應(yīng)關(guān)系符合 ODBC 標(biāo)準(zhǔn)。

mysql> SELECT DAYOFWEEK('1998-02-03');
+---------------------------------------------------------+
|DAYOFWEEK('1998-02-03')                                  |
+---------------------------------------------------------+
| 3                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

DAYOFYEAR(date)

返回 date 是當(dāng)年的第幾天,范圍為 1 到 366。

mysql> SELECT DAYOFYEAR('1998-02-03');
+---------------------------------------------------------+
| DAYOFYEAR('1998-02-03')                                 |
+---------------------------------------------------------+
| 34                                                      |
+---------------------------------------------------------+
1 row in set (0.00 sec)

EXTRACT(unit FROM date)

EXTRACT() 與 DATE_ADD() 和 DATE_SUB() 使用相同的表示單位的占位符,其作用是提取日期值中相應(yīng)的組成部分,而不是進(jìn)行日期運(yùn)算。

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)

FROM_DAYS(N)

給出天數(shù) N,返回 DATE 值。

mysql> SELECT FROM_DAYS(729669);
+---------------------------------------------------------+
| FROM_DAYS(729669)                                       |
+---------------------------------------------------------+
| 1997-10-07                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

在使用 FROM_DAYS() 處理比較老的日期的時候應(yīng)當(dāng)特別小心,該函數(shù)不適用于格里高利歷誕生(1582)之前的日期。

FROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp,format)

返回 UNIX 時間戳對應(yīng)的日期值,根據(jù)函數(shù)所處的上下文環(huán)境不同,返回值得格式也不同,字符串上下文返回格式為 'YYYY-MM-DD HH:MM:SS',數(shù)值型上下文返回格式則為 YYYYMMDDHHMMSS。返回值的時區(qū)為系統(tǒng)當(dāng)前時區(qū)。UNIX 時間戳是一種系統(tǒng)內(nèi)部時間表示,例如 UNIX_TIMESTAMP() 的返回值。

如果給定格式的話,返回結(jié)果將會根據(jù)格式字符串進(jìn)行格式化,其規(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)

HOUR(time)

返回時間值的小時部分。對于一天中的時間來說,返回值的范圍為 0 到 23。不過,TIME 類型的值可以大得多,所以 HOUR 函數(shù)可以返回比 23 大的值。

mysql> SELECT HOUR('10:05:03');
+---------------------------------------------------------+
| HOUR('10:05:03')                                        |
+---------------------------------------------------------+
| 10                                                      |
+---------------------------------------------------------+
1 row in set (0.00 sec)

LAST_DAY(date)

返回 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 and LOCALTIME()

LOCALTIME 和 LOCALTIME() 是 NOW() 的別名。

LOCALTIMESTAMP and LOCALTIMESTAMP()

LOCALTIMESTAMP 和 LOCALTIMESTAMP() 是 NOW() 的別名。

MAKEDATE(year,dayofyear)

給定年份和(某天在一年中)的天數(shù),返回對應(yīng)的日期值。天數(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)

MAKETIME(hour,minute,second)

根據(jù)參數(shù)給出的時、分、秒,返回對應(yīng)的時間值。

mysql> SELECT MAKETIME(12,15,30);
+---------------------------------------------------------+
| MAKETIME(12,15,30)                                      |
+---------------------------------------------------------+
| '12:15:30'                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

MICROSECOND(expr)

根據(jù) time 或者 datetime 表達(dá)式 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)

MINUTE(time)

返回時間型值中的分鐘部分,范圍為 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)

MONTH(date)

返回日期型值中的月份,范圍為 0 到 12。

mysql> SELECT MONTH('1998-02-03')
+---------------------------------------------------------+
| MONTH('1998-02-03')                                     |
+---------------------------------------------------------+
| 2                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

MONTHNAME(date)

返回日期型值所處月份的全名。

mysql> SELECT MONTHNAME('1998-02-05');
+---------------------------------------------------------+
| MONTHNAME('1998-02-05')                                 |
+---------------------------------------------------------+
| February                                                |
+---------------------------------------------------------+
1 row in set (0.00 sec)

NOW()

返回當(dāng)前的日期和時間,結(jié)果的格式為 'YYYY-MM-DD HH:MM:SS' 或者 YYYYMMDDHHMMSS,如果函數(shù)上下文環(huán)境為字符型,則返回前者,否則如果函數(shù)處于數(shù)值型的上下文環(huán)境,則返回后者。返回值的時區(qū)為系統(tǒng)當(dāng)前時區(qū)。

mysql> SELECT NOW();
+---------------------------------------------------------+
| NOW()                                                   |
+---------------------------------------------------------+
| 1997-12-15 23:50:26                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

PERIOD_ADD(P,N)

在時間 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)

PERIOD_DIFF(P1,P2)

返回時間 P1 和 P2 之間相差的月份。 P1 和 P2 的格式應(yīng)為 YYMM 或者 YYYYMM。注意I,P1 和 P2 不是日期型值。

mysql> SELECT PERIOD_DIFF(9802,199703);
+---------------------------------------------------------+
| PERIOD_DIFF(9802,199703)                                |
+---------------------------------------------------------+
| 11                                                      |
+---------------------------------------------------------+
1 row in set (0.00 sec)

QUARTER(date)

返回日期型值 date 所處的季度值,范圍為 1 到 4。

mysql> SELECT QUARTER('98-04-01');
+---------------------------------------------------------+
| QUARTER('98-04-01')                                     |
+---------------------------------------------------------+
| 2                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

SECOND(time)

返回時間型值中秒的部分,范圍為 0 到 59。

mysql> SELECT SECOND('10:05:03');
+---------------------------------------------------------+
| SECOND('10:05:03')                                      |
+---------------------------------------------------------+
| 3                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

SEC_TO_TIME(seconds)

將參數(shù)中的秒數(shù)轉(zhuǎn)換為時分秒的格式 'HH:MM:SS' 或者 HHMMSS,如果函數(shù)所處的上下文為字符串型,則返回前者,否則如果上下文環(huán)境為數(shù)值型,則返回后者。

STR_TO_DATE(str,format)

這是 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)

SUBDATE(date,INTERVAL expr unit) and SUBDATE(expr,days)

當(dāng)?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)

SUBTIME() 返回 expr1-expr2,結(jié)果的格式與 expr1 相同。expr1 是一個時間型(time)或者 datetime 型的表達(dá)式,expr2 是時間型值。

SYSDATE()

返回當(dāng)前的日期和時間,格式為 '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)

TIME(expr)

提取時間型或者 datetime 型表達(dá)式 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)

TIMEDIFF() 返回 expr1-expr2,結(jié)果為時間型值。expr1 和 expr2 可以為時間型或者 datetime 型表達(dá)式,不過二者必須為相同類型。

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)

TIMESTAMP(expr), TIMESTAMP(expr1,expr2)

只有一個參數(shù)的時候,該函數(shù)由日期型或者 datetime 型表達(dá)式返回一個 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)

TIMESTAMPADD(unit,interval,datetime_expr)

將整數(shù)型的表達(dá)式 interval 加到日期型或者 datetime 型表達(dá)式 datetime_expr 上。單位由 unit 參數(shù)給出,其取值應(yīng)為以下幾種中的一種: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)

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)

返回日期型或者 datetime 型表達(dá)式 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)

TIME_FORMAT(time,format)

該函數(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)

TIME_TO