mysql有許多日期相關函數,其中有一些非常好用,有時候在適當的場合用到,可以達到事半功倍的效果。
1. 統計週數據時用到 yearweek 函數,查詢出今年的週數,比如20191216,查詢就是201950
mysql默認 週日當做一週開始,修改成週一當做開始需要在yearweek函數後的model裏面填寫1
2. extract()函數用於從一個date或者interval類型中截取到特定的部分
以下爲oracle的用法,oracle 不支持提取周幾,但是在postgresql中可以使用extract(dow from now()) 來提取周幾
extract ( { year | month | day | hour | minute | second } | { timezone_hour | timezone_minute } | { timezone_region | timezone_abbr } from { date_value | interval_value } )
select extract (year from sysdate) year, extract (month from sysdate) month, extract (day from sysdate) day from dual; YEAR MONTH DAY
3. DATE_ADD()
語法
DATE_ADD(date,INTERVAL expr type);
date 參數是合法的日期表達式。expr 參數是您希望添加的時間間隔。
type 參數可以是下列值:
Type 值 |
---|
MICROSECOND |
SECOND |
MINUTE |
HOUR |
DAY |
WEEK |
MONTH |
QUARTER |
YEAR |
SECOND_MICROSECOND |
MINUTE_MICROSECOND |
MINUTE_SECOND |
HOUR_MICROSECOND |
HOUR_SECOND |
HOUR_MINUTE |
DAY_MICROSECOND |
DAY_SECOND |
DAY_MINUTE |
DAY_HOUR |
YEAR_MONTH |
#51.查詢各學生的年齡,只按年份來算
select student005.Sname ,year(student005.Sage) from student005;
select student005.SId as 學生編號,student005.Sname as
學生姓名,TIMESTAMPDIFF(YEAR,student005.Sage,CURDATE()) as 學生年齡
from student005;
#52.按照出生日期來算,當前月日 < 出生年月的月日則,年齡減一
select student005.SId as 學生編號,student005.Sname as
學生姓名,TIMESTAMPDIFF(YEAR,student005.Sage,CURDATE()) as 學生年齡
from student005;
#53.查詢本週過生日的學生
select *,CURDATE()
from student005
where YEARWEEK(student005.Sage)=YEARWEEK(CURDATE());
select curdate(),YEARWEEK(CURDATE());-- 獲取當前日期
#54.查詢下週過生日的學生
select * from student005
where YEARWEEK(student005.Sage+7)=YEARWEEK(CURDATE());
select *
from student005
where YEARWEEK(student005.Sage)=CONCAT(YEAR(CURDATE()),week(CURDATE())+1);
#55.查詢本月過生日的學生
select *
from student005
where EXTRACT(YEAR_MONTH FROM student005.Sage)
=EXTRACT(YEAR_MONTH FROM CURDATE());
#56.查詢下月過生日的學生查詢下月過生日的學生
select *
from student005
where EXTRACT(YEAR_MONTH FROM student005.Sage)=
EXTRACT(YEAR_MONTH FROM DATE_ADD(CURDATE(),INTERVAL 1 MONTH));