Contents

MYSQL 時間運算 筆記

平常用到時間運算,假如能在SQL撈到想要的資料
這樣程式可以寫得少,速度也跟者快…
但是偏偏MySQL時間運算不太熟
在此網路找一些,寫筆記….

MySQL :: MySQL 5.5 Reference Manual :: 12.7 Date and Time Functions

UNIX_TIMESTAMP()可以用between…and做比較

UNIX_TIMESTAMP()<==>FROM_UNIXTIME()

UNIX_TIMESTAMP()產生UNIX時間戳記
FROM_UNIXTIME()轉一般時間標記(xxxx-xx-xx oo:oo:oo)

DATEDIFF(‘2015-09-28 21:00:01’,‘2015-08-31 13:00:01’);

算出差幾天
帶進去參數不一定要DATETIME格式
UNIX_TIMESTAMP也可以

TIMEDIFF(‘2015-09-28 21:00:01’,‘2015-09-28 13:23:11’)

算出差幾秒,傳回時間格式(datetime)
php - MySQL: how to get the difference between two timestamps in seconds - Stack Overflow

不同於一般DB2和Oracle資料庫用法

MySQL Tryit Editor v1.0
可用MySQL函式,day(),month()….來做判斷幾天或幾個月

TIMESTAMPDIFF(DAY,‘2015-09-28 21:00:01’,‘2015-09-28 13:23:11’)

php - mysql timediff to hours - Stack Overflow

to_days<=>from_days

to_days()傳回天數數字
+1就是加1天

看範例比較快
糯米玩PC: MySql 按日期進行統計
TO_DAYS日期函数 - 我的地盘 - ITeye博客

1
SELECT from_days(to_days(now())+1);   

MySQL Tryit Editor v1.0
直接試比較快懂,我爬了很久
以為是UNIX_TIMESTAMP….但不是

time_to_sec<=>sec_to_time

用時間格式轉乘秒,可以超過24小時
(感覺能用在UNIX_TIMESTAMP運算上面)

MySQL TIME_TO_SEC() Function

MySQL跟DB2 差異寫法

回憶以前用db2的時候

项目中用到过的MYSQ和DB2的部分函数转化 (zxz)_MySQL_第七城市
https://hackmd.io/iQcvSsh_Td6T6oxDjwWXew?view
備份用…
MySQL :: MySQL 5.5 Reference Manual :: 12.7 Date and Time Functions

UNIX_TIMESTAMP 時間加法運算

select now() + INTERVAL 5 HOUR

now()CURRENT_TIMESTAMP是一樣的

很常看到都是用DATETIME型態做運算

datetime運算其實有DATE_ADDDATE_SUB

DATE_ADD和DATE_SUB其實可以通用,因為expr可以為一個負數。
其實很簡單,一個是用加一個是減,不過…DATE_ADD(xxx, - INTERVAL 5 MINUNT) 可以用負數

最後,感覺能用在TIME_TO_SEC用在運算上面
但不知道網路上很少這樣用

小心效能

MySQL裡的NOW()與UNIX_TIMESTAMP()

date(欄位) = xxx 很吃效能
盡量用 WHERE date >= ‘2010-10-01’ AND date < ‘2010-11-01’

where DATE(time_stamp) = DATE(now());

用在欄位很吃效能,可能會造成full scan
datetime要怎麼比較今天呢??
這個我相信很常用
有找到這個
WHERE startTime >= '2010-04-29' AND startTime < ('2010-04-29' + INTERVAL 1 DAY)
MySQL compare DATE string with string from DATETIME field - Stack Overflow
可以參考上面第二個解答
對非欄位做轉換比較不會吃資源
雖然不知道為什麼最佳解答是第一個吃效能的
呵呵

相信可能還有更好用的
可能我沒有記錄到
不過我相信我應該會很常回來看這篇

參考來源: