交行一面:MySQL 中的時間函數(shù)有哪些?該如何使用?
在 MySQL數(shù)據(jù)庫中,提供了一系列獲取時間的函數(shù),這些函數(shù)在我們的日常開發(fā)中經(jīng)常用到。這篇文章,我們將一一列舉這些函數(shù)以及展示如何使用它們和它們的應(yīng)用場景。
NOW()
NOW() 函數(shù)返回當前的日期和時間,格式為YYYY-MM-DD HH:MM:SS,它是日常開發(fā)中使用頻率比較高的函數(shù),用于獲取服務(wù)器的當前時間。使用語法:
SELECT NOW();
-- 輸出示例: '2024-10-30 14:30:00'
使用場景:
- 記錄數(shù)據(jù)插入或更新的時間戳。
- 生成日志記錄時標記時間。
- 用于計算時間差。
CURDATE()和CURTIME()
CURDATE()返回當前日期,格式為YYYY-MM-DD。CURTIME()返回當前時間,格式為HH:MM:SS。使用語法如下:
SELECT CURDATE();
-- 輸出示例: '2024-10-30'
SELECT CURTIME();
-- 輸出示例: '14:30:00'
使用場景:
- CURDATE() 常用于只需要日期部分的場景,如生日、紀念日。
- CURTIME() 常用于需要時間部分的場景,如日程安排、會議時間。
UNIX_TIMESTAMP()和FROM_UNIXTIME()
UNIX_TIMESTAMP()返回從1970-01-01 00:00:00 UTC到當前時間的秒數(shù)。FROM_UNIXTIME()將 UNIX時間戳轉(zhuǎn)換為 MySQL日期時間格式。使用語法如下:
SELECT UNIX_TIMESTAMP();
-- 輸出示例: 1696524600
SELECT FROM_UNIXTIME(1696524600);
-- 輸出示例: '2024-10-30 14:30:00'
使用場景:
- UNIX_TIMESTAMP() 用于將日期時間轉(zhuǎn)換為時間戳,以便進行時間差計算。
- FROM_UNIXTIME() 用于將時間戳轉(zhuǎn)換為可讀的日期時間格式。
DATE_FORMAT()
DATE_FORMAT() 函數(shù)用于以指定格式返回日期/時間數(shù)據(jù)。格式化字符串可以包含日期和時間的各種部分,如年、月、日、小時、分鐘等。使用語法如下:
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');
-- 輸出示例: '2024-10-30 14:30:00'
SELECT DATE_FORMAT(NOW(), '%W, %M %e, %Y');
-- 輸出示例: 'Thursday, October 5, 2023'
使用場景:
- 格式化輸出日期以符合特定的業(yè)務(wù)需求。
- 將日期時間轉(zhuǎn)換為字符串進行顯示。
ADDDATE()和ADDTIME()
ADDDATE()用于向日期添加指定的天數(shù), ADDTIME()用于向時間添加指定的時間。使用語法如下:
SELECT ADDDATE('2024-10-30', INTERVAL 10 DAY);
-- 輸出示例: '2024-10-30'
SELECT ADDTIME('14:30:00', '02:00:00');
-- 輸出示例: '16:30:00'
使用場景:
- ADDDATE() 用于計算未來的日期,比如到期日、未來的事件。
- ADDTIME() 用于計算未來的時間,比如會議結(jié)束時間。
DATEDIFF()和TIMEDIFF()
DATEDIFF()用于計算兩個日期之間的天數(shù)差,TIMEDIFF() 用于計算兩個時間之間的時間差。使用語法如下:
SELECT DATEDIFF('2023-10-15', '2024-10-30');
-- 輸出示例: 10
SELECT TIMEDIFF('16:30:00', '14:30:00');
-- 輸出示例: '02:00:00'
使用場景:
- DATEDIFF() 常用于計算兩個日期之間的間隔,比如租賃天數(shù)、項目工期。
- TIMEDIFF() 常用于計算兩個時間點之間的時間差,比如工時計算。
YEAR(),MONTH(),DAY(),HOUR(),MINUTE(),SECOND()
這些函數(shù)用于從日期或時間中提取特定的部分,如年、月、日、小時、分鐘、秒。使用語法如下:
SELECT YEAR(NOW()), MONTH(NOW()), DAY(NOW());
-- 輸出示例: 2024, 10, 30
SELECT HOUR(NOW()), MINUTE(NOW()), SECOND(NOW());
-- 輸出示例: 14, 30, 0
使用場景:
- 提取日期時間的特定部分以進行進一步分析或計算。
- 用于分組查詢,如按月統(tǒng)計數(shù)據(jù)。
STR_TO_DATE()
STR_TO_DATE()函數(shù)將字符串轉(zhuǎn)換為日期,根據(jù)指定的格式解析字符串。使用語法如下:
SELECT STR_TO_DATE('05-10-2023', '%d-%m-%Y');
-- 輸出示例: '2024-10-30'
SELECT STR_TO_DATE('October 5, 2023', '%M %d, %Y');
-- 輸出示例: '2024-10-30'
使用場景:
- 將用戶輸入的日期字符串轉(zhuǎn)換為日期格式以存儲到數(shù)據(jù)庫。
- 解析非標準格式的日期字符串。
LAST_DAY()
LAST_DAY()函數(shù)返回給定日期的月份的最后一天。使用語法如下:
SELECT LAST_DAY('2024-10-30');
-- 輸出示例: '2024-10-30'
使用場景:
- 計算某個月的結(jié)束日期,以便進行月末結(jié)算。
- 生成月度報告時確定時間范圍。
EXTRACT()
EXTRACT()函數(shù)用于從日期或時間中提取特定的部分,與 YEAR(), MONTH()等函數(shù)類似,但提供了更靈活的提取選項。使用語法如下:
SELECT EXTRACT(YEAR FROM NOW()), EXTRACT(MONTH FROM NOW()), EXTRACT(DAY FROM NOW());
-- 輸出示例: 2024, 10, 30
SELECT EXTRACT(HOUR FROM NOW()), EXTRACT(MINUTE FROM NOW()), EXTRACT(SECOND FROM NOW());
-- 輸出示例: 14, 30, 0
使用場景:
- 提取復(fù)雜日期時間中的特定部分。
- 用于動態(tài)生成查詢條件。
總結(jié)
MySQL 提供了豐富的時間函數(shù),能夠滿足各種日期和時間處理需求。
本文,我們介紹了以下 MySQL 的時間函數(shù),這些函數(shù)涵蓋了日期和時間的獲取、計算、格式化、轉(zhuǎn)換等多種操作,可以滿足不同的開發(fā)需求??偨Y(jié)如下:
- NOW() - 返回當前的日期和時間。
- CURDATE() - 返回當前日期。
- CURTIME() - 返回當前時間。
- UNIX_TIMESTAMP() - 返回從 '1970-01-01 00:00:00' UTC 到當前時間的秒數(shù)。
- FROM_UNIXTIME() - 將 UNIX 時間戳轉(zhuǎn)換為 MySQL 日期時間格式。
- DATE_FORMAT() - 以指定格式返回日期/時間數(shù)據(jù)。
- ADDDATE() - 向日期添加指定的天數(shù)。
- ADDTIME() - 向時間添加指定的時間。
- DATEDIFF() - 計算兩個日期之間的天數(shù)差。
- TIMEDIFF() - 計算兩個時間之間的時間差。
- YEAR() - 從日期中提取年份。
- MONTH() - 從日期中提取月份。
- DAY() - 從日期中提取日。
- HOUR() - 從時間中提取小時。
- MINUTE() - 從時間中提取分鐘。
- SECOND() - 從時間中提取秒。
- STR_TO_DATE() - 將字符串轉(zhuǎn)換為日期。
- LAST_DAY() - 返回給定日期的月份的最后一天。
- EXTRACT() - 從日期或時間中提取特定的部分。