文章主要是作為知識整理,內容略有修改,方便以后查閱,內容轉摘至 陳宇衡的個人博客,歡迎前去圍觀。
作為演示效果,先創建一個測試表,在插入兩條數據(注:時間為 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;
結合前面例子,對時間戳進行相應的轉換就可以了。