使用MYSQL TIMESTAMP字段進(jìn)行時(shí)間加減運(yùn)算問(wèn)題
MYSQL TIMESTAMP字段進(jìn)行時(shí)間加減運(yùn)算
在數(shù)據(jù)分析過(guò)程中,想當(dāng)然地對(duì)TIMESTAMP字段進(jìn)行運(yùn)算,導(dǎo)致結(jié)果謬之千里
計(jì)算公式如下
-- create_time與week_time的聲明都是TIMESTAMP(), 要求精確到分鐘 -- SELECT (sa.create_time - sa.week_time)/(1000 * 60) from alarm_sla_1 sa
當(dāng)然正確的解法是利用timestampdiff函數(shù),如下:
SELECT timestampdiff(minute, sa.create_time, sa.week_time) from alarm_sla_1 sa
但有意思的問(wèn)題在于,MYSQL明明支持減法操作,為何操作的結(jié)果又大相徑庭?
類似的問(wèn)題還有,TIMESTAMP字段的時(shí)間精度是什么?
從MYSQL的官方實(shí)例中可以看到(請(qǐng)見(jiàn)后續(xù)的參考文檔),TIMESTAMP字段的小數(shù)部分確定了秒的經(jīng)度,3位小數(shù)精確到毫秒,6位小數(shù)精確到微秒,如下:
聲明方式 | 小數(shù)長(zhǎng)度 | 精度 |
---|---|---|
TIMESTAMP(3) | 3 | 毫秒 |
TIMESTAMP(6) | 6 | 微秒 |
按照上面的推論,那么默認(rèn)的聲明TIMESTAMP應(yīng)該精確到秒,那么應(yīng)該相減的結(jié)果應(yīng)該得到秒,測(cè)試語(yǔ)句如下:
SELECT sa.week_time - sa.create_time, timestampdiff(second, sa.create_time, sa.week_time) from alarm_sla_1 sa
但最后的結(jié)果見(jiàn)下表:
相減結(jié)果 | 函數(shù)結(jié)果 |
---|---|
1000012 | 86412 |
顯然,并不存在相關(guān)性,差異何止里計(jì)?
后來(lái)繼續(xù)進(jìn)行了指定經(jīng)度的操作運(yùn)算,結(jié)論依舊如此。
DATETIME 與 TIMESTAMP的區(qū)別
特性 | DATETIME | TIMESTAMP |
---|---|---|
時(shí)間范圍 | 1000-01-01 00:00:00到9999-12-31 23:59:59 | 1970-01-01 00:00:01到2038-01-09 03:14:07 |
存儲(chǔ)空間 | 8+3(秒的精度) | 4+3(秒的精度) |
格式轉(zhuǎn)換 | 不支持 | 支持UTC |
多時(shí)區(qū)支持 | 不支持,固定時(shí)區(qū) | 不支持 |
創(chuàng)建索引 | 不能 | 能 |
查詢后緩存結(jié)果 | 否 | 是 |
結(jié)論
MYSQL中TIMESTAMP字段直接進(jìn)行相減操作,可能得到難以理解的結(jié)果,請(qǐng)慎用。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
參考文檔
相關(guān)文章
一文學(xué)習(xí)MySQL?意向共享鎖、意向排他鎖、死鎖
這篇文章主要介紹了MySQL?意向共享鎖、意向排他鎖、死鎖,包括InnoDB表級(jí)鎖,意向共享鎖和意向排他鎖及操作方法,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03mysql 導(dǎo)出select語(yǔ)句結(jié)果到excel文件遇到問(wèn)題及解決方法
這篇文章主要介紹了mysql 導(dǎo)出select語(yǔ)句結(jié)果到excel文件遇到問(wèn)題及解決方法的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09Mysql中replace與replace into的用法講解
今天小編就為大家分享一篇關(guān)于Mysql中replace與replace into的用法講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03MySQL范圍查詢優(yōu)化的場(chǎng)景實(shí)例詳解
范圍訪問(wèn)方法使用單一索引去檢索表中的數(shù)據(jù)包含一個(gè)或者多個(gè)索引值的行記錄,下面這篇文章主要給大家介紹了關(guān)于MySQL范圍查詢優(yōu)化的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06MySQL 不用存儲(chǔ)過(guò)程循環(huán)插入數(shù)據(jù)的方法
在MySQL中,使用INSERT INTO VALUES語(yǔ)句可以一次性插入多行數(shù)據(jù),提高插入效率,還可通過(guò)Python的pymysql庫(kù)生成和執(zhí)行插入語(yǔ)句,這不僅減少了操作時(shí)間,還提高了代碼的簡(jiǎn)潔性和執(zhí)行效率2024-09-09