日期和時間函數(shù)主要用來處理日期和時間值,一般的日期函數(shù)除了使用 DATE 類型的參數(shù)外也可以使用 DATETIME 或者 TIMESTAMP 類型的參數(shù),但會忽略這些值的時間部分。相同的,以TIME 類型值為參數(shù)的函數(shù),可以接受 TIMESTAMP 類型的參數(shù),但會忽略日期部分,許多日期函數(shù)可以同時接受數(shù)字和字符串類型的兩種參數(shù),介紹各種日期和時間函數(shù)的功能和用法。
1 獲取當(dāng)前日期的函數(shù)和獲取當(dāng)前時間的函數(shù)
CURDATE0和 CURRENT DATEO函數(shù)的作用相同,將當(dāng)前日期按照“YYYY-MM-DD’或YYYYMMDD格式的值返回,具體格式根據(jù)函數(shù)在字符串或是數(shù)字語境中而定。
mysql> SELECT CURDATE(),CURRENT_DATE(), CURDATE() + 0;
+------------+----------------+---------------+
| CURDATE() | CURRENT_DATE() | CURDATE() + 0 |
+------------+----------------+---------------+
| 2023-04-28 | 2023-04-28 | 20230428 |
+------------+----------------+---------------+
1 row in set (0.00 sec)
CURTIME0和CURRENT TIME0函數(shù)的作用相同,將當(dāng)前時間以“HH:MMSS’或HHMMSS的格式返回,具體格式根據(jù)函數(shù)在字符串或是數(shù)字語境中而定。
mysql> SELECT CURTIME(),CURRENT_TIME(),CURTIME() + 0;
+-----------+----------------+---------------+
| CURTIME() | CURRENT_TIME() | CURTIME() + 0 |
+-----------+----------------+---------------+
| 09:50:51 | 09:50:51 | 95051 |
+-----------+----------------+---------------+
1 row in set (0.00 sec)
2 獲取當(dāng)前日期和時間的函數(shù)
CURRENT_TIMESTAMPO、LOCALTIME0、NOWO和SYSDATE04個函數(shù)的作用相同,均返回當(dāng)前日期和時間值,格式為“YYYY-MM-DDHH:MM:SS’或YYYYMMDDHHMMSS,具體格式根據(jù)函數(shù)在字符串或數(shù)字語境中而定。
mysql> SELECT CURRENT_TIMESTAMP(),LOCALTIME(),NOW(),SYSDATE();
+---------------------+---------------------+---------------------+---------------------+
| CURRENT_TIMESTAMP() | LOCALTIME() | NOW() | SYSDATE() |
+---------------------+---------------------+---------------------+---------------------+
| 2023-04-28 09:52:41 | 2023-04-28 09:52:41 | 2023-04-28 09:52:41 | 2023-04-28 09:52:41 |
+---------------------+---------------------+---------------------+---------------------+
1 row in set (0.00 sec)
3 UNIX時間戳函數(shù)
UNIX TIMESTAMP(date)若無參數(shù)調(diào)用,表示的是從 1970 年 1 月 1 日 00:00:00 UTC 到當(dāng)前時間的秒數(shù),它是一個整數(shù),可以用于方便地進行時間計算。date 可以是一個DATE 字符串、DATETIME 字符串、TIMESTAMP 或一個當(dāng)?shù)貢r間的YYMMDD或YYYYMMDD 格式的數(shù)字。
mysql> SELECT UNIX_TIMESTAMP(), UNIX_TIMESTAMP(NOW()), NOW();
+------------------+-----------------------+---------------------+
| UNIX_TIMESTAMP() | UNIX_TIMESTAMP(NOW()) | NOW() |
+------------------+-----------------------+---------------------+
| 1682647228 | 1682647228 | 2023-04-28 10:00:28 |
+------------------+-----------------------+---------------------+
1 row in set (0.00 sec)
FROM_UNIXTIME 函數(shù):將一個表示 UNIX 時間戳的秒數(shù)轉(zhuǎn)換為一個日期時間值。兩個函數(shù)互為反函數(shù)。
mysql> SELECT FROM_UNIXTIME('1234567891');
+-----------------------------+
| FROM_UNIXTIME('1234567891') |
+-----------------------------+
| 2009-02-14 07:31:31.000000 |
+-----------------------------+
1 row in set (0.00 sec)
4 返回UTC日期的函數(shù)和返 UTC 時間的函數(shù)
UTC DATE0函數(shù)返回當(dāng)前 UTC(世界標準時間)日期值,其格式為“YYYY-MM-DD’或YYYYMMDD,具體格式取決于函數(shù)是否用在字符串或數(shù)字語境中。
mysql> SELECT UTC_DATE(), UTC_DATE() + 0;
+------------+----------------+
| UTC_DATE() | UTC_DATE() + 0 |
+------------+----------------+
| 2023-04-28 | 20230428 |
+------------+----------------+
1 row in set (0.00 sec)
UTC TIME0返回當(dāng)前 UTC 時間值,其格式為“HH:MM:SS’或HHMMSS,具體格式取決于函數(shù)是否用在字符串或數(shù)字語境中。
mysql> SELECT UTC_TIME(), UTC_TIME() + 0;
+------------+----------------+
| UTC_TIME() | UTC_TIME() + 0 |
+------------+----------------+
| 02:02:42 | 20242 |
+------------+----------------+
1 row in set (0.00 sec)
5 獲取月份的函數(shù)MONTH(date)和 MONTHNAME(date)
MONTH(date)函數(shù)返回 date 對應(yīng)的月份,范圍值為 1~12。
mysql> SELECT MONTH('2023-02-13');
+---------------------+
| MONTH('2023-02-13') |
+---------------------+
| 2 |
+---------------------+
1 row in set (0.00 sec)
MONTHNAME(date)函數(shù)返回日期date 對應(yīng)月份的英文全名
mysql> SELECT MONTHNAME('2023-08-23');
+-------------------------+
| MONTHNAME('2023-08-23') |
+-------------------------+
| August |
+-------------------------+
1 row in set (0.00 sec)
6 獲取星期的函數(shù)DAYNAME(d)DAYOFWEEK(d)和WEEKDAY(d)
DAYNAME(d)函數(shù)返回d 對應(yīng)的工作日的英文名稱。
mysql> SELECT DAYNAME('208-05-24');
+----------------------+
| DAYNAME('208-05-24') |
+----------------------+
| Tuesday |
+----------------------+
1 row in set (0.00 sec)
DAYOFWEEK(d)函數(shù)返回d對應(yīng)的一周中的索引(位置,1 表示周日,2表示周一,…,7表示周六)。
mysql> SELECT DAYOFWEEK('2211-09-30');
+-------------------------+
| DAYOFWEEK('2211-09-30') |
+-------------------------+
| 2 |
+-------------------------+
1 row in set (0.00 sec)
WEEKDAY(d)返回d對應(yīng)的工作日索引:0表示周一,1 表示周二,…,6 表示周日
mysql> SELECT WEEKDAY('1911-08-03 22:23:00'), WEEKDAY('2024-07-01');
+--------------------------------+-----------------------+
| WEEKDAY('1911-08-03 22:23:00') | WEEKDAY('2024-07-01') |
+--------------------------------+-----------------------+
| 3 | 0 |
+--------------------------------+-----------------------+
1 row in set (0.00 sec)
7 獲取星期數(shù)的函數(shù)WEEK(d)和 WEEKOFYEAR(d)
WEEK(d)計算日期d 是一年中的第幾周。WEEK0的雙參數(shù)形式允許指定該星期是否起始于周日或周一,以及返回值的范圍是否為0~53 或1~53。若Mode參數(shù)被省略,則使用default week format系統(tǒng)自變量的值。
mysql> SELECT WEEK('2011-02-20'),WEEK('2011-02-20',0), WEEK('2011-02-20',1);
+--------------------+----------------------+----------------------+
| WEEK('2011-02-20') | WEEK('2011-02-20',0) | WEEK('2011-02-20',1) |
+--------------------+----------------------+----------------------+
| 8 | 8 | 7 |
+--------------------+----------------------+----------------------+
1 row in set (0.00 sec)
使用不同的參數(shù)的原因是不同地區(qū)和國家的習(xí)慣不同,每周的第
天并不相同。
mysql> SELECT WEEK('2011-02-20',3), WEEKOFYEAR('2011-02-20');
+----------------------+--------------------------+
| WEEK('2011-02-20',3) | WEEKOFYEAR('2011-02-20') |
+----------------------+--------------------------+
| 7 | 7 |
+----------------------+--------------------------+
1 row in set (0.00 sec)
8 獲取天數(shù)的函數(shù)DAYOFYEAR(d)和 DAYOFMONTH(d)
DAYOFYEAR(d)函數(shù)返回d 是一年中的第幾天,范圍是 1~366。
mysql> SELECT DAYOFYEAR('1911-08-03');
+-------------------------+
| DAYOFYEAR('1911-08-03') |
+-------------------------+
| 215 |
+-------------------------+
1 row in set (0.00 sec)
DAYOFMONTH(d)函數(shù)返回d 是一個月中的第幾天,范圍是 1~31。
mysql> SELECT DAYOFMONTH('1911-08-03');
+--------------------------+
| DAYOFMONTH('1911-08-03') |
+--------------------------+
| 3 |
+--------------------------+
1 row in set (0.00 sec)
9 獲取年份、季度、小時、分鐘和秒鐘的函數(shù)
YEAR(date)返回date 對應(yīng)的年份,范圍是1970~2069。
mysql> SELECT YEAR('22-02-03'),YEAR('96-02-03');
+------------------+------------------+
| YEAR('22-02-03') | YEAR('96-02-03') |
+------------------+------------------+
| 2022 | 1996 |
+------------------+------------------+
1 row in set (0.00 sec)
QUARTER(date)返回 date 對應(yīng)的一年中的季度值,范圍是1~4。
mysql> SELECT QUARTER('22-05-01');
+---------------------+
| QUARTER('22-05-01') |
+---------------------+
| 2 |
+---------------------+
1 row in set (0.00 sec)
MINUTE(time)返回time 對應(yīng)的分鐘數(shù),范圍是0~59。
mysql> SELECT MINUTE('02-03-04 05:06:07');
+-----------------------------+
| MINUTE('02-03-04 05:06:07') |
+-----------------------------+
| 6 |
+-----------------------------+
1 row in set (0.00 sec)
SECOND(time)返回time 對應(yīng)的秒數(shù),范圍是0~59。
mysql> SELECT SECOND('05:06:07');
+--------------------+
| SECOND('05:06:07') |
+--------------------+
| 7 |
+--------------------+
1 row in set (0.00 sec)
10 獲取日期的指定值的函數(shù) EXTRACT(type FROM date)
EXTRACT(type FROM date)函數(shù)所使用的時間間隔類型說明符與DATE ADDO或DATE SUBO的相同,但它從日期中提取一部分,而不是執(zhí)行日期運算。
mysql> SELECT EXTRACT(YEAR FROM '1976-07-02') AS col1,
-> EXTRACT(YEAR_MONTH FROM '2011-08-13 02:03:03') AS col2,
-> EXTRACT(DAY_MINUTE FROM '2311-09-14 03:04:03') AS col3;
+------+--------+--------+
| col1 | col2 | col3 |
+------+--------+--------+
| 1976 | 201108 | 140304 |
+------+--------+--------+
1 row in set (0.00 sec)
type值為YEAR 時,只返回年值,type 值為 YEAR MONTH 時返回年與月份,type 值為 DAY_MINUTE 時,返回日、小時和分鐘值。
11 時間和秒鐘轉(zhuǎn)換的函數(shù)
TIME TOSEC(time)返回已轉(zhuǎn)化為秒的 time 參數(shù)。轉(zhuǎn)換公式為:小時3600+分鐘60+秒。
mysql> SELECT TIME_TO_SEC('13:23:00');
+-------------------------+
| TIME_TO_SEC('13:23:00') |
+-------------------------+
| 48180 |
+-------------------------+
1 row in set (0.00 sec)
SEC TO TIME(seconds)返回被轉(zhuǎn)化為小時、分鐘和秒數(shù)的 seconds 參數(shù)值,其格式為HH:MM:SS’或HHMMSS,具體格式根據(jù)該函數(shù)是否用在字符串或數(shù)字語境中而定。
mysql> SELECT SEC_TO_TIME(12345),SEC_TO_TIME(12345)+0,
-> TIME_TO_SEC('13:23:00'), SEC_TO_TIME(72580);
+--------------------+----------------------+-------------------------+--------------------+
| SEC_TO_TIME(12345) | SEC_TO_TIME(12345)+0 | TIME_TO_SEC('13:23:00') | SEC_TO_TIME(72580) |
+--------------------+----------------------+-------------------------+--------------------+
| 03:25:45 | 32545 | 48180 | 20:09:40 |
+--------------------+----------------------+-------------------------+--------------------+
1 row in set (0.00 sec)
12 計算日期和時間的函數(shù)
計算日期和時間的函數(shù)有 DATE ADDO、ADDDATE0、DATE SUBO、SUBDATEO、ADDTIME0、SUBTIMEO和 DATE DIFFO。
在DATE ADD(date,INTERVAL expr type)和 DATE SUB(date,INTERVAL expr type)中,date是一個DATETIME或DATE 值,用來指定起始時間。expr 是個表達式,用來指定從起始日期添加或減去的時間間隔值。對于負值的時間間隔,expr 可以以一個負號“-’開頭。type 為關(guān)鍵詞,指示了表達式被解釋的方式。
指定修改的時間段時,也可以指定負值,負值代表相減,即返回以前的日期和時間。
若 date 參數(shù)是一個 DATE 值,計算只會包括 YEAR、MONTH和 DAY 部分(沒有時間部分),其結(jié)果是一個 DATE 值;否則,結(jié)果將是一個 DATETIME 值。
DATEADD(dateINTERVAL expr type)和ADDDATE(dateINTERVAL expr type)兩個函數(shù)的作用相同,執(zhí)行日期的加運算。
mysql> SELECT DATE_ADD('2020-12-31 23:59:59', INTERVAL 1 SECOND) AS col1,
-> ADDDATE('2030-12-31 23:59:59', INTERVAL 1 SECOND) AS col2,
-> DATE_ADD('2040-12-31 23:59:59', INTERVAL '1:1' MINUTE_SECOND) AS col3;
+---------------------+---------------------+---------------------+
| col1 | col2 | col3 |
+---------------------+---------------------+---------------------+
| 2021-01-01 00:00:00 | 2031-01-01 00:00:00 | 2041-01-01 00:01:00 |
+---------------------+---------------------+---------------------+
1 row in set (0.00 sec)
前兩個是將時間增加 1S 后進行返回,最后是增加1分1秒進行返回的結(jié)果。
DATESUB(dateINTERVALexpr type)或者SUBDATE(dateINTERVALexpr type)兩個函數(shù)的作用相同,執(zhí)行日期的減運算。
mysql> SELECT DATE_SUB('2011-01-02', INTERVAL 31 DAY) AS col1,
-> SUBDATE('2011-01-02', INTERVAL 31 DAY) AS col2,
-> DATE_SUB('2011-01-01 00:01:00',INTERVAL '0 0:1:1' DAY_SECOND) AS col3;
+------------+------------+---------------------+
| col1 | col2 | col3 |
+------------+------------+---------------------+
| 2010-12-02 | 2010-12-02 | 2010-12-31 23:59:59 |
+------------+------------+---------------------+
1 row in set (0.00 sec)
DATE ADD和 DATE SUB 在指定修改的時間段時,也可以指定負值,負值代表相減即返回以前的日期和時間。
ADDTIME(date,expr)函數(shù)將 expr 值添加到 date,并返回修改后的值,date 是一個日期或者日期時間表達式,而expr 是一個時間表達式。
mysql> SELECT ADDTIME('2000-12-31 23:59:59','1:1:1'), ADDTIME('02:02:02', '02:00:00');
+----------------------------------------+---------------------------------+
| ADDTIME('2000-12-31 23:59:59','1:1:1') | ADDTIME('02:02:02', '02:00:00') |
+----------------------------------------+---------------------------------+
| 2001-01-01 01:01:00 | 04:02:02 |
+----------------------------------------+---------------------------------+
1 row in set (0.00 sec)
SUBTIME(date,expr)函數(shù)將 date 減去 expr 值,并返回修改后的值。其中,date 是一個日期或者日期時間表達式,而expr 是一個時間表達式。
mysql> SELECT SUBTIME('2000-12-31 23:59:59','1:1:1'), SUBTIME('02:02:02','02:00:00');
+----------------------------------------+--------------------------------+
| SUBTIME('2000-12-31 23:59:59','1:1:1') | SUBTIME('02:02:02','02:00:00') |
+----------------------------------------+--------------------------------+
| 2000-12-31 22:58:58 | 00:02:02 |
+----------------------------------------+--------------------------------+
1 row in set (0.00 sec)
DATEDIFF(datel,date2)返回起始時間 datel 和結(jié)束時間 date2 之間的天數(shù)。datel和 date2 為日期或日期時間表達式。計算中只用到這些值的日期部分。
mysql> SELECT DATEDIFF('2010-12-31 23:59:59','2010-12-30') AS col1,
-> DATEDIFF('2010-11-30 23:59:59','2010-12-31') AS col2;
+------+------+
| col1 | col2 |
+------+------+
| 1 | -31 |
+------+------+
1 row in set (0.00 sec)
13 將日期和時間格式化的函數(shù)
DATEFORMAT(date,format)根據(jù) format 指定的格式顯示date值所示。
使用DATE FORMATO函數(shù)格式化輸出日期和時間值
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y') AS col1,
-> DATE_FORMAT('1997-10-04 22:23:00','%D %y %a %d %m %b %j') AS col2;
+-----------------------+--------------------------+
| col1 | col2 |
+-----------------------+--------------------------+
| Saturday October 1997 | 4th 97 Sat 04 10 Oct 277 |
+-----------------------+--------------------------+
1 row in set (0.00 sec)
TIME FORMAT(timeformat)根據(jù)表達式format 的要求顯示時間 time。表達式format 指定了顯示的格式。因為TIME FORMAT(timeformat)只處理時間,所以format 只使用時間格式。
mysql> SELECT TIME_FORMAT('16:00:00', '%H %k %h %I %l');
+-------------------------------------------+
| TIME_FORMAT('16:00:00', '%H %k %h %I %l') |
+-------------------------------------------+
| 16 16 04 04 4 |
+-------------------------------------------+
1 row in set (0.00 sec)
GET_FORMAT(val type,format type)返回日期時間字符串的顯示格式,val type 表示日期數(shù)據(jù)類型,包括 DATE、DATETIME和TIME;format type 表示格式化顯示類型,包括EUR、INTERVAL、ISO、JIS、USA。GET FORMAT 根據(jù)兩個值類型組合返回的字符串顯示格式。文章來源:http://www.zghlxwxcb.cn/news/detail-428225.html
mysql> SELECT GET_FORMAT(DATE,'EUR'), GET_FORMAT(DATE,'USA');
+------------------------+------------------------+
| GET_FORMAT(DATE,'EUR') | GET_FORMAT(DATE,'USA') |
+------------------------+------------------------+
| %d.%m.%Y | %m.%d.%Y |
+------------------------+------------------------+
1 row in set (0.00 sec)
mysql> SELECT DATE_FORMAT('2000-10-05 22:23:00', GET_FORMAT(DATE,'USA') );
+-------------------------------------------------------------+
| DATE_FORMAT('2000-10-05 22:23:00', GET_FORMAT(DATE,'USA') ) |
+-------------------------------------------------------------+
| 10.05.2000 |
+-------------------------------------------------------------+
1 row in set (0.00 sec)
GET FORMAT(DATEUSA返回的顯示格式字符串為%m.%d%Y,%m 以數(shù)字形式顯示月份,%d 以數(shù)字形式顯示日,%Y 以4 位數(shù)字形式顯示年。文章來源地址http://www.zghlxwxcb.cn/news/detail-428225.html
到了這里,關(guān)于MySQL(七)-日期和時間函數(shù)的使用解析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!