亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Mysql 中的日期時(shí)間函數(shù)示例詳解

 更新時(shí)間:2025年06月11日 11:04:18   作者:獨(dú)淚了無痕  
MySQL中的常見日期函數(shù),包括日期函數(shù)的介紹、日期格式轉(zhuǎn)換、日期計(jì)算、日期比較以及其他日期函數(shù),這些日期函數(shù)可以幫助我們更好地處理和操作日期和時(shí)間數(shù)據(jù),提高數(shù)據(jù)庫的查詢和分析效率,本文給大家介紹Mysql 中的日期時(shí)間函數(shù),感興趣的朋友一起看看吧

前言

  在 MySQL 中,處理日期和時(shí)間是非常常見的需求,MySQL中內(nèi)置了大量的日期和時(shí)間函數(shù),能夠靈活、方便地處理日期和時(shí)間數(shù)據(jù),本節(jié)就簡單介紹一下 MySQL中內(nèi)置的日期和時(shí)間函數(shù),以便更好地利用這些函數(shù)來處理日期和時(shí)間數(shù)據(jù)。

獲取當(dāng)前日期和時(shí)間

  獲取當(dāng)前時(shí)刻的時(shí)間就是獲取程序運(yùn)行的那一刻與時(shí)間相關(guān)的數(shù)據(jù),比如年月日、時(shí)分秒等信息。

序號函數(shù)簡要說明
1now()用于獲取當(dāng)前的日期和時(shí)間,其返回值格式為 YYYY-MM-DD HH:MM:SS。
該函數(shù)在整個(gè)查詢過程中保持不變,可以確保所有記錄的時(shí)間戳一致,因此被廣泛用于記錄數(shù)據(jù)的創(chuàng)建時(shí)間或更新時(shí)間。
2curdate()用于獲取當(dāng)前的日期,其返回值格式為 YYYY-MM-DD。該函數(shù)在需要僅獲取日期信息時(shí)非常有用,因?yàn)樗梢员苊鈱r(shí)間部分的額外處理。
3curtime()用于獲取當(dāng)前的時(shí)間,其返回值格式為 HH:MM:SS。該函數(shù)在需要僅獲取時(shí)間信息時(shí)非常有用,例如在記錄事件發(fā)生的具體時(shí)間或計(jì)算時(shí)間間隔時(shí)。
4current_timestamp()用于獲取當(dāng)前的日期和時(shí)間,其返回值格式為 YYYY-MM-DD HH:MM:SS。
5sysdate()

用于獲取執(zhí)行時(shí)的日期和時(shí)間。

INSERT INTO orders (order_id, order_time) VALUES (1, NOW());
SELECT COUNT(*) FROM sales WHERE sale_date = CURDATE();
SELECT CURTIME();

日期時(shí)間格式化與轉(zhuǎn)換

  我們知道同一個(gè)日期時(shí)間會(huì)有多種不同的表示方式,有的時(shí)候需要在不同格式之間相互轉(zhuǎn)換。在 MySQL 中,可以使用日期函數(shù)將日期和時(shí)間數(shù)據(jù)從一種格式轉(zhuǎn)換為另一種格式,以下是一些常用的日期格式轉(zhuǎn)換函數(shù):

序號函數(shù)簡要說明
1date_format(datetime,format)用于將日期和時(shí)間值按照指定的格式進(jìn)行格式化,其返回值為一個(gè)字符串,在需要將日期和時(shí)間以特定格式展示時(shí)非常有用。
該函數(shù)支持多種格式化選項(xiàng),可以根據(jù)需求靈活定制日期時(shí)間的顯示格式。
2time_format(time,format)按照指定的格式format來格式化日期date
3STR_TO_DATE(str, format)用于將字符串轉(zhuǎn)換為日期或日期時(shí)間值,其返回值為一個(gè)日期或日期時(shí)間值,在需要將非標(biāo)準(zhǔn)格式的字符串日期轉(zhuǎn)換為標(biāo)準(zhǔn)的日期格式時(shí)非常有用。
4FROM_DAYS()將天數(shù)轉(zhuǎn)換為日期
5TIME_TO_SEC(time)將time轉(zhuǎn)化為秒并返回結(jié)果值,轉(zhuǎn)化的公式為:小時(shí)*3600 + 分鐘*60 + 秒。
6SEC_TO_TIME(seconds)將seconds描述轉(zhuǎn)化為包含小時(shí)、分鐘和秒的時(shí)間

  在上述方法中,其中 datetime 表示要被轉(zhuǎn)換的具體的日期時(shí)間,format 表示要轉(zhuǎn)換成的格式,可選的格式如下:

格式描述格式描述格式描述
%Y4位數(shù)的年%T返回當(dāng)前的時(shí)分秒, 24-小時(shí) (hh:mm:ss)
%b月份對應(yīng)的英文縮寫%M月份對應(yīng)的英文全稱%m01-12的月
%c1-12的月份數(shù)值%d01-31的某月里面的第幾天%e1-31的某月里面的第幾天
%D用th后綴表示某月中的第幾天%j001-366的一年中的第幾天%a星期幾對應(yīng)的英文縮寫
%W星期幾對應(yīng)的英文全稱%H00-23的小時(shí)%h01-12的小時(shí)
%i00-59的分鐘%S秒(00-59)%f微秒
SELECT DATE_FORMAT('2022-11-09 12:34:56', '%Y-%m-%d %H:%i:%s');

日期時(shí)間計(jì)算(加減)

  有的時(shí)候我們也需要對日期之間進(jìn)行運(yùn)算,比如要獲取今天往前7天對應(yīng)的日期,或者今天往后13天對應(yīng)的日期,可以去翻日歷,也可以去數(shù)數(shù),但是這些方法肯定都不是最直接的方法,所以需要日期之間的運(yùn)算。MySQL 提供了一些日期函數(shù),可以使用這些函數(shù)來執(zhí)行日期加法、日期減法等操作。以下是一些常用的日期計(jì)算函數(shù):

序號函數(shù)簡要說明
1date_add(date, INTERVAL num unit)用于在日期上添加指定的時(shí)間間隔,其返回值為一個(gè)新的日期值,常用于計(jì)算未來的日期。
2ADDDATE(date, INTERVAL num unit)在日期上加上指定的時(shí)間間隔。
3ADDTIME(time1,time2)返回time1加上time2的時(shí)間
4date_sub(date, INTERVAL num unit)用于從日期中減去指定的時(shí)間間隔,其返回值為一個(gè)新的日期值,常用于計(jì)算過去的日期。
5SUBDATE(date, INTERVAL num unit)從日期中減去指定的時(shí)間間隔。
6SUBTIME(time1,time2)返回time1減去time2后的時(shí)間。
7datediff(date1,date2)用于計(jì)算兩個(gè)日期之間的天數(shù)差,其返回值為一個(gè)整數(shù),表示兩個(gè)日期之間的天數(shù)差,常用于計(jì)算時(shí)間間隔,例如任務(wù)的持續(xù)時(shí)間等。
8TIMEDIFF(time1, time2)計(jì)算兩個(gè)時(shí)間之間的時(shí)間差
9TIMESTAMPDIFF(unit, expr1, expr2)計(jì)算兩個(gè)日期之間的時(shí)間差,以指定的單位返回。
10TIMESTAMPADD(unit, interval, datetime_expr)給日期時(shí)間添加指定單位的時(shí)間
11TIMESTAMPDIFF(unit, datetime_expr1, datetime_expr2)返回兩個(gè)日期時(shí)間表達(dá)式的時(shí)間差,使用指定的單位

  在上述方法中,date表示具體的日期時(shí)間,interval是一個(gè)固定的參數(shù),unit 表示要返回的單獨(dú)的部分,unit 值可以是下列的值:

unit說明unit說明unit說明
yearmonthday
hour小時(shí)minute分鐘second
week周數(shù),全年第幾周
SELECT DATE_ADD('2022-11-09', INTERVAL 10 DAY);
SELECT DATE_SUB('2022-11-09', INTERVAL 10 DAY);
SELECT DATEDIFF('2022-11-09', '2023-06-17');
SELECT TIMESTAMPDIFF(MONTH, '2022-01-01', '2023-12-31');

日期時(shí)間部分提取

序號函數(shù)簡要說明
1YEAR(date)用于獲取日期所在的年份,其返回值為一個(gè)整數(shù),表示年份。在實(shí)際應(yīng)用中,常用于按年份對數(shù)據(jù)進(jìn)行分組或篩選。
2MONTH(date)用于獲取日期對應(yīng)的月份,其返回值為一個(gè)整數(shù),表示月份(1-12)。在實(shí)際應(yīng)用中,在按月份對數(shù)據(jù)進(jìn)行分組或篩選時(shí)非常有用。
3DAY(date)用于從日期或日期時(shí)間值中提取天數(shù)部分,其返回值為一個(gè)整數(shù),表示月份中的天數(shù),取值范圍1-31。
4HOUR(time)用于從時(shí)間或日期時(shí)間值中提取小時(shí)部分,其返回值為一個(gè)整數(shù),表示小時(shí),取值范圍0-23。
5MINUTE(time)用于從時(shí)間或日期時(shí)間值中提取分鐘部分,其返回值為一個(gè)整數(shù),表示分鐘,取值范圍0-59。
6SECOND(time)用于從時(shí)間或日期時(shí)間值中提取秒部分,其返回值為一個(gè)整數(shù),表示秒,取值范圍0-59。
7DATE(date)用于提取日期或日期時(shí)間的日期部分
8MONTHNAME(date)用于獲取日期所在月份的英文名稱。
9DAYNAME(date)用于獲取給定日期對應(yīng)星期的英文名稱。
10WEEKDAY(date)用于獲取日期對應(yīng)的一周中的索引值。0表示星期一,1表示星期二,以此類推。
11QUARTER(date)用于獲取日期對應(yīng)的季度,范圍為1~4。
12WEEK(date)用于獲取給定日期所在年的第幾周。
13WEEKOFYEAR(date)用于獲取給定日期所在年份的第幾周。
14DAYOFYEAR(date)用于獲取日期是一年中的第幾天
15DAYOFMONTH(date)用于獲取日期位于所在月份的第幾天
16DAYOFWEEK(date)用于獲取日期對應(yīng)的一周中的索引值。1表示星期日,2表示星期一,以此類推。
17YEARWEEK(date)用于獲取日期所在的年份和周數(shù)。
18LAST_DAY(date)用于獲取日期所在月份的最后一天的日期。
SELECT YEAR('2022-11-09 12:34:56');
SELECT MONTH('2022-11-09 12:34:56');
SELECT DAY('2022-11-09 12:34:56');
SELECT HOUR('2022-11-09 12:34:56');
SELECT MINUTE('2022-11-09 12:34:56');
SELECT SECOND('2022-11-09 12:34:56');

時(shí)間戳轉(zhuǎn)換

序號函數(shù)簡要說明
1FROM_UNIXTIME(unix_timestamp[, format])將UNIX時(shí)間戳轉(zhuǎn)換為可讀的日期格式。
2UNIX_TIMESTAMP(date)將日期轉(zhuǎn)換為UNIX時(shí)間戳。
SELECT FROM_UNIXTIME(1672444800);
SELECT UNIX_TIMESTAMP(NOW());

其他有用的函數(shù)

函數(shù)簡要說明
MAKEDATE(year,n)針對給定年份與所在年份中的天數(shù)返回一個(gè)日期。
MAKETIME(hour,minute,second)將給定的小時(shí)、分鐘和秒組合成時(shí)間并返回。
SELECT MAKEDATE(2025,1);

附錄

獲取本月第一天

SELECT DATE_ADD(CURDATE(), INTERVAL -DAY(CURDATE()) + 1 DAY);
SELECT CONCAT(DATE_FORMAT(CURDATE(), '%Y-%m'), '-01');

查詢今日、昨日、周、上月、本月數(shù)據(jù)

-- 今天
SELECT * FROM 表名 WHERE to_days(時(shí)間字段名) = to_days(now());
-- 昨天
SELECT * FROM 表名 WHERE TO_DAYS(NOW()) - TO_DAYS(時(shí)間字段名) <= 1 AND TO_DAYS(NOW()) - TO_DAYS(時(shí)間字段名) > 0;
-- 近7天
SELECT * FROM 表名 WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(時(shí)間字段名);
-- 查詢當(dāng)前這周的數(shù)據(jù)(注意:獲取周是從周日至周六計(jì)算的,與我們國內(nèi)周一至周日的習(xí)慣不同)
SELECT * FROM 表名 WHERE YEARWEEK(date_format(時(shí)間字段名, '%Y-%m-%d')) = YEARWEEK(now());
-- 查詢上周的數(shù)據(jù)(同上)
SELECT * FROM 表名 WHERE YEARWEEK(date_format(時(shí)間字段名, '%Y-%m-%d')) = YEARWEEK(now()) - 1;
-- 近30天
SELECT * FROM 表名 WHERE DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(時(shí)間字段名);
查詢當(dāng)前月份的數(shù)據(jù) 
-- SELECT * FROM 表名 WHERE DATE_FORMAT(時(shí)間字段名, '%Y-%m') = DATE_FORMAT(now(),'%Y-%m');
-- SELECT * FROM 表名 WHERE DATE_FORMAT(時(shí)間字段名, '%Y%m') = DATE_FORMAT(CURDATE(), '%Y%m' );
-- 上一月數(shù)據(jù)
SELECT * FROM 表名 WHERE PERIOD_DIFF(date_format(now( ), '%Y%m') , date_format(時(shí)間字段名, '%Y%m')) = 1;
-- 查詢本季度數(shù)據(jù)
SELECT * FROM 表名 WHERE QUARTER(時(shí)間字段名) = QUARTER(now());
-- 查詢上季度數(shù)據(jù)
SELECT * FROM 表名 WHERE QUARTER(時(shí)間字段名)=QUARTER(DATE_SUB(now(),interval 1 QUARTER));
-- 查詢本年數(shù)據(jù)
SELECT * FROM 表名 WHERE YEAR(時(shí)間字段名)=YEAR(NOW());
-- 查詢上年數(shù)據(jù)
SELECT * FROM 表名 WHERE year(時(shí)間字段名)=year(date_sub(now(),interval 1 year));
-- 查詢距離當(dāng)前現(xiàn)在6個(gè)月的數(shù)據(jù)
SELECT * FROM 表名 WHERE 時(shí)間字段名 between date_sub(now(), interval 6 month) and now();

小結(jié)

  MySQL 中的常見日期函數(shù),包括日期函數(shù)的介紹、日期格式轉(zhuǎn)換、日期計(jì)算、日期比較以及其他日期函數(shù)。這些日期函數(shù)可以幫助我們更好地處理和操作日期和時(shí)間數(shù)據(jù),提高數(shù)據(jù)庫的查詢和分析效率。熟練掌握這些日期函數(shù),將有助于我們在 MySQL 中更好地處理日期和時(shí)間相關(guān)的業(yè)務(wù)需求

到此這篇關(guān)于Mysql 中的日期時(shí)間函數(shù)匯總的文章就介紹到這了,更多相關(guān)Mysql 日期時(shí)間函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論