現實中我們會遇到統計報表。比如查詢當月每一天的數據數量。。。等等之類的。以下內容就是有關這方面的咯。
首先要知道幾個函數
mysql> select now(); //這個是顯示的當前時間 +---------------------+ | now() | +---------------------+ | 2016-12-09 18:39:57 | +---------------------+ 1 row in set mysql> select curdate(); //這個是當前日期 +------------+ | curdate() | +------------+ | 2016-12-09 | +------------+ 1 row in set
mysql> select date(now()); //當前時間格式化為日期 +-------------+ | date(now()) | +-------------+ | 2016-12-09 | +-------------+ 1 row in set mysql> select month(now()); //當前時間格式化為月份 +--------------+ | month(now()) | +--------------+ | 12 | +--------------+ 1 row in set mysql> select year(now()); //當前時間格式化為年份 +-------------+ | year(now()) | +-------------+ | 2016 | +-------------+ 1 row in set
以上都是簡單的東西,以下主要用的是DATE_FORMAT函數
MySQL DATE_FORMAT() DATE_FORMAT(date,format) date 參數是合法的日期。format 規定日期/時間的輸出格式。 可以使用的格式有: 格式 描述 %a 縮寫星期名 %b 縮寫月名 %c 月,數值 %D 帶有英文前綴的月中的天 %d 月的天,數值(00-31) %e 月的天,數值(0-31) %f 微秒 %H 小時 (00-23) %h 小時 (01-12) %I 小時 (01-12) %i 分鍾,數值(00-59) %j 年的天 (001-366) %k 小時 (0-23) %l 小時 (1-12) %M 月名 %m 月,數值(00-12) %p AM 或 PM %r 時間,12-小時(hh:mm:ss AM 或 PM) %S 秒(00-59) %s 秒(00-59) %T 時間, 24-小時 (hh:mm:ss) %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 位 DATA_SUB函數 定義和用法 DATE_SUB() 函數從日期減去指定的時間間隔。 語法 DATE_SUB(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
更詳細的參考W3cSchool:Date函數
例子1:查詢一個表,從當前年份開始,向后退12年,每一年的數據量。(如果有的年份無數據就不會顯示)
mysql> select count(*),DATE_FORMAT(a.article_time,'%Y') t from article a where DATE_FORMAT(a.article_time,'%Y') > DATE_FORMAT(DATE_SUB(now(),INTERVAL 12 YEAR),'%Y') group by t; +----------+------+ | count(*) | t | +----------+------+ | 1 | 2015 | | 54 | 2016 | +----------+------+ 2 rows in set
例子2:查詢一個表,在當前年份的每一個月數據量(如果無數據就不會顯示)
mysql> select count(*),DATE_FORMAT(a.article_time,'%Y-%m') t from article a where DATE_FORMAT(a.article_time,'%Y') = DATE_FORMAT(now(),'%Y') group by t; +----------+---------+ | count(*) | t | +----------+---------+ | 1 | 2016-07 | | 22 | 2016-08 | | 26 | 2016-09 | | 3 | 2016-10 | | 1 | 2016-11 | | 1 | 2016-12 | +----------+---------+ 6 rows in set
例子3:查詢某個月的每一天的數據量。(如果沒有數據就不會顯示)
mysql> select count(*),DATE_FORMAT(a.article_time,'%Y-%m-%d') t from article a where DATE_FORMAT(a.article_time,'%Y-%m') = '2016-09' group by t; +----------+------------+ | count(*) | t | +----------+------------+ | 22 | 2016-09-03 | | 2 | 2016-09-21 | | 1 | 2016-09-22 | | 1 | 2016-09-27 | +----------+------------+ 4 rows in set