MySQL中日期加減(前一天、后一天等)以及格式化的函數


序言

查詢條件中使用時間區間作為篩選條件,難免的會碰到對日期的操作,如獲取前一天、后一天、一周前、一個月前等,索性整理一下MySQL中的相關函數

日期的加減

DATE_ADD和DATE_SUB

語法為:DATE_ADD(date,interval expr type)、DATE_SUB(date,interval expr type)
其中常用的type的類型有:second、minute、hour、day、month、year等

DATE_ADD是對日期的增加,如果天數為負數時,則表示對日期減少,
DATE_SUB是對日期的減少,如果天數為負數時,則表示對日期增加

詳細說明請查看官方文檔

https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html

可靈活使用

例如:

-- 獲取當前日期 2020-04-07
SELECT CURDATE();
-- 獲取當前時間 15:24:01
SELECT CURTIME();
-- 獲取當前日期加時間 2020-04-07 23:10:30
SELECT NOW();
-- 獲取明天的日期 2020-04-08 獲取日期時間格式將CURDATE()替換成NOW()即可
SELECT DATE_ADD(CURDATE(), INTERVAL 1 DAY);
-- 或者 其他獲取月、年方法同樣就不重復寫了
SELECT DATE_SUB(CURDATE(), INTERVAL -1 DAY);
# 獲取下個月、明年將DAY替換成對應MONTH、YEAR即可
SELECT DATE_ADD(CURDATE(), INTERVAL 1 MONTH);
-- 獲取明年的日期 2021-04-07
SELECT DATE_ADD(CURDATE(), INTERVAL 1 YEAR);
-- 獲取減去一天2小時
SELECT DATE_ADD('2022-02-04 20:00:00', INTERVAL '-1 2' DAY_HOUR);
# -> '2022-02-03 18:00:00'
# 獲取減去一天1小時1分鍾1秒
SELECT DATE_SUB('2025-01-01 00:00:00', INTERVAL '1 1:1:1' DAY_SECOND);
# -> '2024-12-30 22:58:59'

日期/時間轉換為字符串(格式化):

date_format

語法為:date_format(date,format),date 參數是合法的日期。format 規定日期/時間的輸出格式。
常用的格式有:

格式 描述
%Y 年,4 位
%y 年,2 位
%m 月,數值(00-12)
%M 月名
%D 帶有英文前綴的月中的天
%d 月的天,數值(00-31)
%H 小時 (00-23)
%h 小時 (01-12)
%i 分鍾,數值(00-59)
%S 秒(00-59)
%s 秒(00-59)
-- 格式化當前日期 2020-04-07 23:23:23
date_format(now(),'%Y-%m-%d %H:%i:%s' )
-- 格式化當前時間 23:23:23
time_format(CURTIME(),'%H:%i:%s') 

字符串轉換為日期:

str_to_date

這是DATE_FORMAT()函數的逆函數。它接受一個字符串str和一個格式字符串format。如果格式字符串同時包含日期和時間部分,STR_TO_DATE()返回一個DATETIME值;如果字符串只包含日期或時間部分,則返回一個date或time值。str中包含的日期、時間或datetime值應該以format指定的格式給出。關於可以在格式中使用的說明符,請參閱DATE_FORMAT()函數描述。如果str包含非法的日期、時間或datetime值

STR_TO_DATE(STR, FORMAT)

SELECT STR_TO_DATE('08/11/2018', '%M/%D/%Y'); -- 2018-08-11

SELECT STR_TO_DATE('08/11/08' , '%M/%D/%Y'); -- 2018-08-11

SELECT STR_TO_DATE('08.11.2008', '%M.%D.%Y'); -- 2018-08-11

SELECT STR_TO_DATE('08:00:30', '%H:%I:%S'); -- 08:00:30

SELECT STR_TO_DATE('08.11.2018 08:00:30', '%M.%D.%Y %H:%I:%S');

日期的差值

datediff

DATEDIFF(date1,date2) 返回起始時間 date1 和結束時間 date2 之間的天數(date2-date1,正負情況都存在)。date1 和 date2 為日期或 date-and-time 表達式,計算差值時只會計算日期的差值,單位為天。

-- 當前時間2020-04-08,差值為-2
SELECT DATEDIFF(NOW(),'2020-04-10') 
-- 當前時間2020-04-08,差值為2
SELECT DATEDIFF(NOW(),'2020-04-06') 

timestampdiff

語法為:TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)。
返回日期或日期時間表達式datetime_expr1 和datetime_expr2the 之間的整數差。其結果的單位由interval 參數給出。
常用的值有:

  • FRAC_SECOND。表示間隔是毫秒
  • SECOND。秒
  • MINUTE。分鍾
  • HOUR。小時
  • DAY。天
  • WEEK。星期
  • MONTH。月
  • QUARTER。季度
  • YEAR。年
-- now()值為 2020-04-08 23:20:20
SELECT TIMESTAMPDIFF(DAY,NOW(),'2020-04-10 23:23:23') 
-- 結果為2,相差兩天,取整數
-- 其他單位同理

Unix 時間戳轉換:

# 1533956241 (s)
SELECT UNIX_TIMESTAMP(); 
 
# 1533916800
SELECT UNIX_TIMESTAMP('2018-08-11'); 
 
# 1533961800
SELECT UNIX_TIMESTAMP('2018-08-11 12:30:00'); 
 
# 2018-08-11 10:57:21
SELECT FROM_UNIXTIME(1533956241);
 
# 2018-08-11 00:00:00
SELECT FROM_UNIXTIME(1533916800); 
 
# 2018-08-11 12:30:00
SELECT FROM_UNIXTIME(1533961800); 
 
# 2018 11th August 12:30:00 2018
SELECT FROM_UNIXTIME(1533961800, '%Y %D %M %h:%i:%s %x');

我的技術博客 https://blog.52ipc.top/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM