SQL 日期函數(shù)

2022-05-20 16:46 更新

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_SEC(time)


 將時間型值轉(zhuǎn)換為秒。

mysql> SELECT TIME_TO_SEC('22:23:00');
+---------------------------------------------------------+
| TIME_TO_SEC('22:23:00')                                 |
+---------------------------------------------------------+
| 80580                                                   |
+---------------------------------------------------------+
1 row in set (0.00 sec)、

TO_DAYS(date)


 給定日期型值 date,返回天數(shù)(自公元 0 年以來的天數(shù))。

mysql> SELECT TO_DAYS(950501);
+---------------------------------------------------------+
| TO_DAYS(950501)                                         |
+---------------------------------------------------------+
| 728779                                                  |
+---------------------------------------------------------+
1 row in set (0.00 sec)

UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)


 不帶任何參數(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_DATE, UTC_DATE()


 返回當(dāng)前 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_TIME, UTC_TIME()


 返回當(dāng)前 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)

WEEK(date[,mode])


 該函數(shù)將返回 date 所在的周是當(dāng)年的第幾周。兩個參數(shù)的 WEEK() 函數(shù)的使你能夠指明一周起始于周日還是周一,以及返回值的范圍應(yīng)該是 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)

WEEKDAY(date)


 返回 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)

WEEKOFYEAR(date)


 返回 date 所在的周是當(dāng)年的第幾周,范圍從 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)

YEAR(date)


 返回 date 的年份部分,范圍為 1000 到 9999,對于日期 0 則返回 0。

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

YEARWEEK(date), YEARWEEK(date,mode)


 返回 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() 返回的不同,因?yàn)?WEEK() 函數(shù)的返回值在給定年份的的上下文環(huán)境中得出。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號