前言
項目業務實現需要查詢本日,本周,本月數據;
看到此需求,第一想法是去獲取當前時間戳,然后計算出時間截止時間,然后傳入SQL查詢區間數據;相對比較繁瑣,查詢各路大神對此類需求的實現,發現更好的方法,特記錄如下,以便再次遇到此類需求,同時為廣大網友提供參考
SQL編寫
1 -- 查詢本周數據 2 SELECT * FROM t_user WHERE YEARWEEK(date_format(add_time,'%Y-%m-%d')) = YEARWEEK(now()); 3 -- 查詢當前月份的數據 4 select * from t_user where date_format(add_time,'%Y-%m')=date_format(now(),'%Y-%m') 5 -- 查詢當天數據 6 select * from t_user where TO_DAYS(add_time) = TO_DAYS(NOW()) 7 -- 查詢距離當前現在6個月的數據 8 select * from t_user where add_time between date_sub(now(),interval 6 month) and now(); 9 -- 查詢三天的數據 10 select * from t_user where DATEDIFF(deadline_time,NOW())<3 AND DATEDIFF(deadline_time,NOW())>=0
擴展
下列修飾符可以被用在format字符串中:
%M 月名字(January……December) %W 星期名字(Sunday……Saturday) %D 有英語前綴的月份的日期(1st, 2nd, 3rd, 等等。) %Y 年, 數字, 4 位 %y 年, 數字, 2 位 %a 縮寫的星期名字(Sun……Sat) %d 月份中的天數, 數字(00……31) %e 月份中的天數, 數字(0……31) %m 月, 數字(01……12) %c 月, 數字(1……12) %b 縮寫的月份名字(Jan……Dec) %j 一年中的天數(001……366) %H 小時(00……23) %k 小時(0……23) %h 小時(01……12) %I 小時(01……12) %l 小時(1……12) %i 分鍾, 數字(00……59) %r 時間,12 小時(hh:mm:ss [AP]M) %T 時間,24 小時(hh:mm:ss) %S 秒(00……59) %s 秒(00……59) %p AM或PM %w 一個星期中的天數(0=Sunday ……6=Saturday ) %U 星期(0……52), 這里星期天是星期的第一天 %u 星期(0……52), 這里星期一是星期的第一天 %% 一個文字“%”。
請注意
1.數據庫字段類型必須是“datetime”的
2.TO_DAYS(date)函數給定一個日期date,返回一個日期號碼(自0年以來的天數)。
3.TO_DAYS()不適用於公歷日歷(1582)出現之前的值,因為它不考慮日歷更改時丟失的日期。在1582年之前的日期(可能在其他地區的其他年份),此功能的結果不可靠。
4.MySQL將日期中的兩位數年份值轉換為四位數形式 。例如, '2017-10-09'、 '17-10-09'和‘171009’被看作是相同的日期