最近在看《mysql技術內幕:sql程式設計》並做了筆記,這是一篇筆記型別部落格,分享出來方便自己複習,也可以幫助其他人
各種日期時間資料型別所佔的空間:
型別所佔空間
datetime
8位元組date
3位元組timestamp
4位元組year
1位元組time
3位元組ok,這裡特意介紹一下timestamp秒的小數部分問題
備註:5.6.4+版本才支援秒的小數部分,之前版本是不支援的
# 查詢mysql版本
select version();
# 建表驗證問題
create
table t (a datetime);
# 寫資料秒後面加上小數
insert
into t select
'2019-10-11 17:16:12.55555'
;# 查詢,發現並沒有查出秒之後的小數
select
*from t ;
# 使用microsecond,讀取秒之後的小數
select microsecond(
'2019-10-11 17:16:12.55555');
# cast讀取,驗證了5.7+版本查詢時候會出現四捨五入,如下sql得到2019-10-11 17:16:12,而低版本就不會
select cast(
'2019-10-11 17:16:12.5555'
asdatetime);
# cast讀取,5.7+版本查詢,四捨五入得到,2019-10-11 17:16:12,低版本正常顯示,具體哪個版本開始的不知道,我在5.7+版本驗證都是會出現四捨五入的情況
select cast(
'2019-10-11 17:16:12.1234'
asdatetime);
# 5.6.4+版本支援秒的小數部分
# 支援的型別有time、datetime、timestamp,寫法是type(size),size為小數部分精度,最大為6
# 刪表,再驗證一下
drop
table t;
# 這裡指定精度
create
table t (a datetime(4
));# 秒後加小數,寫資料
insert
into t select
'2019-10-11 17:16:12.55555'
;# 查詢,發現可以正常寫資料,不過精度只有4
select
*from t ;
timestamp佔4個位元組,顯示的範圍為「1970-01-01」utc 到 「2038-01-19 03:14:07」utc
備註:utc:協調世界時間、又稱世界統一時間、世界標準時間和國際協調時間
注意:例子,驗證一下,設定預設值和自動更新時間
# 新增一張表
create
table t (
a int
, b timestamp
default
current_timestamp
)engine
=innodb
;# 寫一條資料
insert
into t (a)
values(1
);# 查詢,發現自動賦預設值時間
驗證自動更新時間問題
# 修改欄位為自動更新(資料有改變時候才會自動更新)
alter
table t modify
column b timestamp
onupdate
current_timestamp
;# 刪一下表資料
delete
from t;
# 寫初始化資料
insert
into t select1,
current_timestamp
;# 查詢,先記錄下原來時間
# 修改資料
update t set a =2;
# 如果修改為1,是不會改變時間的
介紹一下mysql比較常用的now、current_timestamp和sysdate函式
給個例子,用sleep函式,然後對比sleep函式執行前後,這幾個函式獲取的時間對比
從圖對比可知,now()其實就是current_timestamp()的近意函式,例子裡使用了sleep(2),隔2秒繼續執行,可以對比得知,now、current_timestamp其實獲取的都是整條sql開始執行的時間,不管在sleep函式執行前後,而sysdate獲取的其實執行sysdate這個函式時候的時間,並非整條sql開始執行的時間,所以在sleep函式執行前後獲取的時間是不同的
date_add(date , interval expr type)和date_sub(datte , intterval expr type),expr可以為負數,所以date_add既可以用於日期相加,也可以用於日期相減。type可以為year、month、day、hour、minute、second
備註:閏月問題,如果是閏月就返回29日,不是閏月就返回28日
MySQL系列之日期和時間型別筆記
最近在看 mysql技術內幕 sql程式設計 並做了筆記,這是一篇筆記型別部落格,分享出來方便自己複習,也可以幫助其他人 各種日期時間資料型別所佔的空間 型別所佔空間 datetime 8位元組date 3位元組timestamp 4位元組year 1位元組time 3位元組ok,這裡特意介紹一下t...
MySQL 資料型別之日期和時間型別
表示時間值的日期和時間型別為datetime date timestamp time和year。每個時間型別有乙個有效值範圍和乙個 零 值,當指定不合法的mysql不能表示的值時使用 零 值。1,date 範圍 1000 01 01 9999 12 31 格式 yyyy mm dd 2,time 範...
Python之日期和時間
python 程式能用很多方式處理日期和時間,如time模組 calendar 模組可以用於格式化日期和時間 一 time模組 1 time.localtime 返回本地時間元組 a time.localtime print a 列印內容 time.struct time tm year 2020,...