Mysql基礎函數,常用日期時間函數詳解

MySQL提供了大量豐富的函數,在MySQL的使用中經常會用到各種函數,本文講解的是常見的MySQL的日期與時間函數,主要用於處理日期和時間值。

工具/原料

電腦
mysql環境
Navicat等資料庫可視化管理工具

方法/步驟

1.獲取當前日期和當前時間的函數

CURDATE()或CURRENT_DATE():獲取當前日期函數,返回值按「YYYY-MM-DD」或"YYYYMMDD"格式,格式根據函數在字符串或是數字語境而定

CURTIME()或CURRENT_TIME():獲取當前時間,返回值按「HH:MM:SS」或"HHMMSS"格式,格式根據函數在字符串或是數字語境而定

示例

SELECT CURDATE(),CURDATE()+0,CURRENT_DATE(),CURTIME(),CURTIME()+0,CURRENT_TIME();

2.獲取當前日期+時間的函數

CURRENT_TIMESTAMP()或LOCALTIME()或NOW()或SYSDATE():獲取當前日期+時間的函數,返回值按「YYYY-MM-DD HH:MM:SS」或"YYYYMMDDHHMMSS"格式,格式根據函數在字符串或是數字語境而定

示例

SELECT CURRENT_TIMESTAMP(),LOCALTIME(),NOW(),SYSDATE(),CURRENT_TIMESTAMP()+0,LOCALTIME()+0,NOW()+0,SYSDATE()+0;

3.普通時間戳轉UNIX時間戳,UNIX時間戳轉普通時間戳函數

UNIX_TIMESTAMP([d]):普通時間格式轉UNIX時間戳,d為可選項,不填的時候返當前時間戳

FROM_UNIXTIME(str):UNIX時間戳轉為普通時間格式。

示例

SELECT UNIX_TIMESTAMP(),UNIX_TIMESTAMP(NOW()),NOW(),FROM_UNIXTIME(UNIX_TIMESTAMP());

4.返回UTC(世界標準時間)日期的函數,返回UTC時間的函數,返回值按「YYYY-MM-DD」或"YYYYMMDD"格式,格式根據函數在字符串或是數字語境而定

UTC_DATE():返回UTC(世界標準時間)日期的函數

UTC_TIME():返回UTC(世界標準時間)時間的函數

示例

SELECT UTC_DATE(),UTC_TIME(),UTC_DATE()+0,UTC_TIME()+0;

5.獲取月份的函數

MONTH(d):獲取日期d的月份,阿拉伯值

MONTHNAME(d):獲取日期d的月份,英文值

示例

SELECT MONTH(NOW()),MONTHNAME(NOW());

6.獲取星期的函數

DAYNAME(d):獲取日期d的英文名稱

DAYOFWEEK(d):獲取日期d在一周中的索引,1-周日,2-周一.....7-周六

WEEKDAY(d):也是獲取日期d在一周中的索引,但是索引位置有所不同,0-周一,1-周二...6-周日

示例

SELECT DAYNAME(NOW()),DAYOFWEEK(NOW()),WEEKDAY(NOW());

7.獲取當前是一年中的第幾個星期函數

WEEK(d,mode):計算某天位於一年中的第幾個星期,範圍是0-53或1-53

WEEKOFYEAR(d,mode):計算某天位於一年中的第幾個星期,範圍是1-53,相當於WEEK(d,3);

mode 的範圍

0 - 周日 - 0~53 - 本年度中有一個周日

1 - 周一 - 0~53 - 本年度有3天以上

2 - 周日 - 1~53 - 本年度中有一個周日

3 - 周一 - 1~53 - 本年度有3天以上

4 - 周日 - 0~53 - 本年度有3天以上

5 - 周一 - 0~53 - 本年度有1個周一

6 - 周日 - 1~53 - 本年度有3天以上

7 - 周一 - 1~53 - 本年度有1個周一

示例

SELECT NOW(),WEEK(NOW()),WEEK(NOW(),0),WEEK(NOW(),1),WEEK(NOW(),3),WEEKOFYEAR(NOW());

8.獲取天數函數

DOYORYEAR(d):獲取日時間d是一年中的第幾天,範圍是1-366

DOYOFMONTH(d):獲取日期時間d是當月中的第幾天,範圍是1-31

DAYOFWEEK(d):獲取日期時間d是當周中的第幾天,範圍是1-7,周日為1,周六為7

示例

SELECT NOW(),DAYOFYEAR(NOW()),DAYOFMONTH(NOW()),DAYOFWEEK(NOW());

9.計算日期的函數

DATE_ADD(d,INTERVAL expr type):日期加運算,type格式見下文

ADDDATE(d,INTERVAL expr type):日期加運算,type格式見下文

DATE_SUB(d,INTERVAL expr type):日期減運算,type格式見下文

SUBDATE(d,INTERVAL expr type):日期減運算,type格式見下文

ADDTIME(d,expr):時間加運算

SUBTIME(d,expr):時間減運算

DATEDIFF(d1,d2):兩個日期間的間隔天數

type的格式

SECOND 秒 SECONDS

MINUTE 分鐘 MINUTES

HOUR 時間 HOURS

DAY 天 DAYS

MONTH 月 MONTHS

YEAR 年 YEARS

MINUTE_SECOND 分鐘和秒 "MINUTES:SECONDS"

HOUR_MINUTE 小時和分鐘 "HOURS:MINUTES"

DAY_HOUR 天和小時 "DAYS HOURS"

YEAR_MONTH 年和月 "YEARS-MONTHS"

HOUR_SECOND 小時, 分鐘, "HOURS:MINUTES:SECONDS"

DAY_MINUTE 天, 小時, 分鐘 "DAYS HOURS:MINUTES"

DAY_SECOND 天, 小時, 分鐘, 秒 "DAYS HOURS:MINUTES:SECONDS"

示例

SELECT NOW(),DATE_ADD(NOW(),INTERVAL 2 DAY),ADDDATE(NOW(),INTERVAL 300 SECOND);#當前時間添加兩天,添加300秒

SELECT NOW(),DATE_SUB(NOW(),INTERVAL 1 MONTH),SUBDATE(NOW(),INTERVAL 300 MINUTE);#當前時間減少一個月,減少300分鐘

SELECT NOW(),ADDTIME(NOW(),'1:1:1'),SUBTIME(NOW(),'2:2:2');#當前時間添加1小時1分1秒,當前時間減少2小時2分2秒

SELECT NOW(),DATEDIFF(NOW(),DATE_ADD(NOW(),INTERVAL 1 YEAR));#計算當前時間與一年後當前時間的日期差

10.日期格式化函數

日期格式化通配符說明

%a : 工作日的縮寫(Sun,Mon,...Sat)

%b : 月份的縮寫(Jun,Feb,...,Dec)

%c : 數字形式的月份(1,...,12)

%D : 帶有英文後綴的該月日期(1st,2nd,3rd....)

%d : 數字形式的日期,不足兩位前方補零(01,02,...,31)

%e : 數字形式的日期(1,...,31)

%f : 微秒

%H : 以24小時制表示當前是多少點,不足兩位前方補零(01,02,...,24)

%h,%I: 以12小時制表示當前是多少點,不足兩位前方補零(01,02,...,12)

%i : 數字形式的分鐘(00,01,...,59)

%j : 一年中的第幾天(001,...,366)

%k : 以24小時制表示當前是多少點(1,2,...,24)

%l : 以12小時制表示當前是多少點(1,2,...,12)

%M : 月份名稱(Junuary,...,December)

%m : 月份名稱數字形式(01,...,12)

%p : AM/PM

%r : 時間(12小時制,如9:00:00 AM)

%S,%s : 秒的數字形式(00,01,...,59)

%T : 時間(24小時制,如9:00:00)

%U : 第幾周(00,53),周日為第一天

%u : 第幾周(00,53),周一為第一天

%V : 第幾周(01,53),周一為第一天,和%X一起使用

%v : 第幾周(01,53),周一為第一天,和%x一起使用

%W : 工作日名稱(周日,周一...)

%w : 一周中的每日(0=周日...6=周六)

%X : 該周的年份,周日為第一天,數字形式4位數,和%V一起用

%x : 該周的年份,周一為第一天,數字形式4位數,和%v一起用

%Y : 4位數字形式的年份

%y : 2位數字形式的年份

%% :%符號

DATE_FORMAT():日期格式化函數

示例

SELECT DATE_FORMAT(NOW(),'%Y %m %d'),DATE_FORMAT(NOW(),'%X %V');

注意事項

本文並沒有講解所有的時間日期函數,而是挑了部分常用的講解。
學無止境

本文內容整理自網絡, 文中所有觀點看法不代表淘大白的立場