日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

MySQL中时间日期类型的使用

發(fā)布時間:2024/3/12 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL中时间日期类型的使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、MySQL中 日期和時間類型

參考?MySQL 數(shù)據(jù)類型(還有其他知識)

參考?SQL 數(shù)據(jù)類型

表示時間值的日期和時間類型為 DATETIME、DATE、TIMESTAMP、TIME和YEAR。

每個時間類型有一個有效值范圍和一個"零"值,當(dāng)指定不合法的MySQL不能表示的值時使用"零"值。

TIMESTAMP類型有專有的自動更新特性。

MySQL中 日期和時間類型類型大小(字節(jié))范圍格式用途
DATE31000-01-01/9999-12-31YYYY-MM-DD日期值
TIME3'-838:59:59'/'838:59:59'HH:MM:SS時間值或持續(xù)時間
YEAR11901/2155YYYY年份值
DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和時間值
TIMESTAMP4

1970-01-01 00:00:00/2038

結(jié)束時間是第?2147483647?秒,北京時間?2038-1-19 11:14:07,格林尼治時間 2038年1月19日 凌晨 03:14:07

YYYYMMDD HHMMSS混合日期和時間值,時間戳

二、日期和時間類型的使用

開始使用的是 Mysql 5.5.47

創(chuàng)建表時出錯了,遇到兩個問題。。

問題一:

[Err] 1067 - Invalid default value for 'create_time'

查閱資料,原來是版本問題

在5.5到5.6.4版本里,對于DEFAULT CURRENT_TIMESTAMP 子句,只能TIMESTAMP類型列上指定。

而從5.6.5開始以后的版本,對于DEFAULT CURRENT_TIMESTAMP子句可以指定到TIMESTAMP或者DATETIME類型列上。

問題二:

想給一個類型為date字段設(shè)置一個default value(CURRENT_DATE,CURRENT_DATE(),NOW())但試了很久都不行。最后試了下 DEFAULT NULL 成功了,再試下 DEFAULT 1也成功了。最后網(wǎng)上查了一下資料,原因是date類型的default value 一定要是一個常量,不能是一個函數(shù)或者是表達(dá)式。所以不能給MySQL的date類型的列設(shè)置默認(rèn)值。


三、TIMESTAMP和DATETIME比較

相同點:

兩者都可用來表示YYYY-MM-DD HH:MM:SS 類型的日期。

不同點:

他們的的存儲方式,大小(字節(jié)),表示的范圍不同。

TIMESTAMP,它把客戶端插入的時間從當(dāng)前時區(qū)轉(zhuǎn)化為UTC(世界標(biāo)準(zhǔn)時間)進(jìn)行存儲。查詢時,將其又轉(zhuǎn)化為客戶端當(dāng)前時區(qū)進(jìn)行返回。

DATETIME,不做任何改變,基本上是原樣輸入和輸出。

總結(jié):TIMESTAMP和DATETIME?都可用來表示YYYY-MM-DD HH:MM:SS 類型的日期, 除了存儲方式和存儲范圍以及大小不一樣,沒有太大區(qū)別。但對于跨時區(qū)的業(yè)務(wù),TIMESTAMP更為合適。


四、時間與時間戳之間轉(zhuǎn)換

有些應(yīng)用生成的時間戳是比這個多出三位,是毫秒表示,如果要轉(zhuǎn)換,需要先將最后三位去掉(標(biāo)準(zhǔn)的10位數(shù)字,如果是13位的話可以以除以1000的方式),否則返回NULL

#將時間轉(zhuǎn)換為時間戳unix_timestamp SELECT UNIX_TIMESTAMP('2019-02-22 13:25:07'); #1550813107#將時間戳轉(zhuǎn)換為時間from_unixtime SELECT FROM_UNIXTIME(1550813107); #2019-02-22 13:25:07#NOW SELECT UNIX_TIMESTAMP(NOW()); #1550813420 SELECT FROM_UNIXTIME(1550813420); #2019-02-22 13:30:20

參考?MySQL的10位或13位時間戳獲取,表示及13位時間戳的存儲


五、按時間日期查詢

然后我將 Mysql 改為 Mysql 5.7.17,升一下版本

參考?MySQL DATE_FORMAT() 函數(shù)

#MySQL 按時間日期查詢 DROP TABLE IF EXISTS tb_test; CREATE TABLE IF NOT EXISTS tb_test(id INT NOT NULL AUTO_INCREMENT COMMENT 'ID',name VARCHAR(100) DEFAULT NULL COMMENT '名稱',create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8 COMMENT '時間測試表';#插入數(shù)據(jù) INSERT INTO tb_test (name) VALUES ('luo'), ('lei'), ('luolei'), ('xing'), ('dxx');#修改數(shù)據(jù) UPDATE tb_test SET name='luo1', update_time='2021-01-23' WHERE id=100; UPDATE tb_test SET name='luo2', update_time='2022-02-23' WHERE id=101; UPDATE tb_test SET name='luo3', update_time='2023-03-23' WHERE id=102;#根據(jù)年月日查數(shù)據(jù) SELECT *FROM tb_test WHERE DATE_FORMAT(update_time, '%Y-%m-%d')='2019-02-22'; #根據(jù)年月查數(shù)據(jù) SELECT *FROM tb_test WHERE DATE_FORMAT(update_time, '%Y-%m')='2021-01'; #根據(jù)年查數(shù)據(jù) SELECT *FROM tb_test WHERE DATE_FORMAT(update_time, '%Y')='2022';#根據(jù)日期區(qū)間查詢數(shù)據(jù),并排序 SELECT *FROM tb_test WHERE DATE_FORMAT(update_time, '%Y') BETWEEN '2019' AND '2023' ORDER BY update_time ASC;

個人網(wǎng)站歡迎來訪

http://www.leixingke.com/

總結(jié)

以上是生活随笔為你收集整理的MySQL中时间日期类型的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。