mysql 統計按天、星期、按月數據的各種 sql 語句 (轉錄)


文章主要是作為知識整理,內容略有修改,方便以后查閱,內容轉摘至 陳宇衡的個人博客,歡迎前去圍觀。

作為演示效果,先創建一個測試表,在插入兩條數據(注:時間為 datetime 類型,unix 時間戳需要轉換)

1. 創建表:

    create table if not exists t
    (
        id int,
        addTime datetime default '0000-00-00 00:00:00'
    )

2. 添加兩條初始數據:

    insert t values(1, '2017-03-12 02:00:00');
    insert t values(2, '2017-03-22 02:00:00');

當天或當日插入的數據:

  • 傳統對比判斷:SELECT count(*) FROM t WHERE DATE_FORMAT(addTime, '%Y-%m-%d') = date_format(now(),'%Y-%m-%d'));
  • 第一點的簡寫:SELECT * FROM t WHERE addTime >= date_format(NOW(), '%Y-%m-%d');
  • 利用函數判斷:SELECT * FROM t WHERE DATEDIFF(addTime, NOW()) =0;(推薦此方法)

注:返回當天時間的mysql函數有
CURDATE()CURRENT_DATE()CURRENT_DATE 返回格式 0000-00-00 (年-月-日),
NOW() 返回格式 0000-00-00 00:00:00 (年-月-日 時:分:秒) 幾種;

當周的相關數據寫法:

  • 獲取今天是一周第幾天或星期幾:SELECT WEEKDAY(now()); (返回的是數字:0為周一,6為周日)
  • 獲取本周的第一天日期:SELECT DATE_SUB(now(), INTERVAL WEEKDAY(now()) day);(或SELECT DATE_ADD(now(),INTERVAL -WEEKDAY(now()) day);SELECT CURDATE() – WEEKDAY(CURDATE());)
  • 再寫一個上周的第一天至現在的數據:(以表t為數據表)
    SELECT * FROM t WHERE addTime >= date_format(date_sub(date_sub(now(), INTERVAL WEEKDAY(NOW()) DAY), INTERVAL 1 WEEK), ‘%Y-%m-%d’);是不是有些感覺了!
    注:若你是以時間戳保存的時間字段,那么請用from_unixtime()函數轉換為時間格式,如:from_unixtime($timestamp)
    INTERVAL的用戶說明:
    1、當函數使用時,即INTERVAL(),為比較函數,如:INTERVAL(10,1,3,5,7); 結果為4;
    原理:10為被比較數,后面1,3,5,7為比較數,將后面四個依次與10比較,看后面數字組有多少個少於10,則返回其個數。前提是后面數字組為從小到大排列,否則返回結果0。
    2、當關鍵詞使用時,表示為設置時間間隔,常用在date_add()date_sub()函數里,如:INTERVAL 1 DAY,解釋為將時間間隔設置為1天。
    弄清楚了上面幾個重要的日期運算函數,下面再來一個混合的日期運算。
    3、上個月的第一天時間:SELECT DATE_SUB(DATE_SUB(NOW(), INTERVAL DAYOFMONTH(NOW()) -1 DAY), INTERVAL 1 MONTH); 是不是一目了然了!

當月的相關數據寫法:

  • 今天是當月的第幾天:SELECT DAYOFMONTH(NOW());
  • 獲取當月的第一天時間:SELECT DATE_SUB(NOW(), INTERVAL DAYOFMONTH(NOW()) –1 DAY);
    日期運算函數,句型:date_add(date,INTERVAL expr type)date_sub(date,INTERVAL expr type),date為一個datetime或date值,可當作起始時間,expr為一個表達式,用來指定增加或減少的時間間隔數目,可為一個字符串–若為負值,則在表達式前加個"-"符號。type為關鍵詞,它表示了表達式被解釋的方式,通常用年(year)月(month)日(day)周(week)等。

Mysql中將日期轉為時間戳

前三點的方法,講的都是將日期轉為相應時間常量,並沒有提到時間戳與時間的轉換,這里把它寫出來,
1、時間戳轉日期,方法是select from_unixtime(1336542121);
2、日期轉時間戳,方法是:select unix_timestamp('2013-04-08');
例如 按天統計新增記錄:select count(*) as count, from_unixtime(addTime, '%Y-%m-%d') as datetime from t;
結合前面例子,對時間戳進行相應的轉換就可以了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM