一、DATE_FORMAT()
需求:按照日期月份統計數據,但數據庫存儲的格式是 '2020-10-01 10:20:45' ,因此需要格式化日期
語法:
DATE_FORMAT(date,format)
第一個參數:指定的日期,第二個參數:需要獲取的格式
格式符
說明
%a
工作日的縮寫名稱? (Sun..Sat)
%b
月份的縮寫名稱? (Jan..Dec)
%c
月份,數字形式(0..12)
%D
帶有英語后綴的該月日期? (0th, 1st, 2nd, 3rd, ...)
%d
該月日期, 數字形式 (00..31)
%e
該月日期, 數字形式(0..31)
%f
微秒 (000000..999999)
%H
小時(00..23)
%h
小時(01..12)
%I
小時 (01..12)
%i
分鐘,數字形式 (00..59)
%j
一年中的第幾天 (001..366)
%k
小時 (0..23)
%l(小寫L)
小時 (1..12)
%M
月份名稱 (January..December)
%m
月份, 數字形式 (00..12)
%p
上午(AM)或下午( PM)
%r
獲得時間 ,例如 (10: 11: 43 AM)
%S
秒 (00..59)
%s
秒 (00..59)
%T
時間 , 例如 (10:11:43? ?不加AM或PM)
%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('2019-03-09 10:18:37','%Y-%m-%d')
返回:2019-03-09
SELECT DATE_FORMAT('2019-03-09 10:18:37','%Y年%m月%d日')
返回:2019年03月09日
例如:獲取日期的月份
select DATE_FORMAT(createTime,'%m') from user
1.查詢某年某月某日的數據(主語字符區分大小寫)
select
*
fromt_empWHEREDATE_FORMAT(birthday,'%Y-%m-%d' ) = '2020-11-02';
參考:
二、concat()
在執行模糊查詢的SQL 語句中會用到 ‘%’ 拼接,如果是字符串可能會引入 SQL 注入,使用占位符則需要將注入的值與 '%' 拼接 ,用法如下
SELECT * FROM USER WHERE NAME LIKE concat( '%', '張', '%' )
三、TO_DAYS()
1.查詢今天過生日的人(今天2020-11-04)
SELECT
*
FROMt_empWHERETO_DAYS( birthday )= TO_DAYS( CURDATE( ) )
2.查詢昨天過生日的人(如果要包含今天改為小于等于)
SELECT
*
FROMt_empWHERETO_DAYS(CURDATE())- TO_DAYS(birthday) = 1
四、DATE_SUB()
1.查詢最近7天的數據(包含今天)
SELECT
*
FROMt_empWHEREbirthday> DATE_SUB( CURDATE(), INTERVAL 7 DAY )
五、year / month
1.查詢今年的數據
select
*
fromt_empWHERE
YEAR(birthday) = year(CURDATE());
2.查詢某個月份的數據(只考慮月份)
select
*
fromt_empWHERE
MONTH(birthday) = 11;
六、quarter()
1.查詢本季度的數據
select
*
fromt_empWHEREQUARTER(birthday)= QUARTER(CURDATE())
2.查詢上季度的數據
select
*
fromt_empWHEREQUARTER(CURDATE())- QUARTER(birthday) =1