MySQL系列之日期和時間型別筆記

2021-09-28 14:54:05 字數 3909 閱讀 2280

最近在看《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,...