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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

mysql提供了表示日期和时间的数据类型_MySQL数据类型 - 日期和时间类型(1)

發(fā)布時(shí)間:2023/12/10 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql提供了表示日期和时间的数据类型_MySQL数据类型 - 日期和时间类型(1) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.日期和時(shí)間數(shù)據(jù)類型語(yǔ)法

用于表示時(shí)間值的日期和時(shí)間數(shù)據(jù)類型是DATE, TIME, DATETIME, TIMESTAMP和 YEAR。

對(duì)于TIME, DATETIME和 TIMESTAMP值,MySQL支持小數(shù)秒,精度可達(dá)微秒(6位數(shù))。要定義包含小數(shù)秒部分的列,請(qǐng)使用語(yǔ)法type_name(fsp),其中type_name是TIME、DATETIME或TIMESTAMP,fsp是小數(shù)秒精度。例如:

fsp值(如果給定)必須在0到6的范圍內(nèi)。值為0表示不存在小數(shù)部分。如果省略,則默認(rèn)精度為0。(這與標(biāo)準(zhǔn)的SQL默認(rèn)值6不同,是為了與以前的MySQL版本兼容。)

表中的任何TIMESTAMP或DATETIME列都可以自動(dòng)初始化和更新:

●DATE

日期值,支持的范圍是'1000-01-01'到'9999-12-31'。MySQL以'YYYY-MM-DD'格式顯示DATE值,但允許使用字符串或數(shù)字將值分配給DATE列。

●DATETIME[(fsp)]

日期和時(shí)間的組合。支持的范圍是'1000-01-01 00:00:00.000000'到'9999-12-31 23:59:59.999999'。MySQL以'YYYY-MM-DD hh:MM:ss[.fraction]'格式顯示DATETIME值,但允許使用字符串或數(shù)字將值分配給DATETIME列。

可以給出0到6范圍內(nèi)的可選fsp值,以指定小數(shù)秒精度。值為0表示不存在小數(shù)部分。如果省略,則默認(rèn)精度為0。

可以使用列定義子句DEFAULT為DATETIME列自動(dòng)初始化到當(dāng)前日期和時(shí)間,使用列定義子句ON UPDATE為DATETIME列更新到當(dāng)前日期和時(shí)間。

●TIMESTAMP[(fsp)]

時(shí)間戳。范圍是'1970-01-01 00:00:01.000000' UTC到'2038-01-19 03:14:07.999999' UTC。TIMESTAMP值存儲(chǔ)為自'1970-01-01 00:00:00' UTC以來(lái)的秒數(shù)。它不能表示值'1970-01-01 00:00:00',因?yàn)檫@相當(dāng)于0秒,而值0保留為表示'0000-00-00 00:00:00',TIMESTAMP的零值。

可以給出0到6范圍內(nèi)的可選fsp值,以指定小數(shù)秒精度。值為0表示不存在小數(shù)部分。如果省略,則默認(rèn)精度為0。

服務(wù)器處理TIMESTAMP定義的方式取決于explicit_defaults_for_timestamp系統(tǒng)變量值。

如果啟用了explicit_defaults_for_timestamp,則不會(huì)自動(dòng)將DEFAULT CURRENT_TIMESTAMP或ON UPDATE CURRENT_TIMESTAMP屬性分配給任何TIMESTAMP列。它們必須顯式地包含在列定義中。此外,任何未顯式聲明為NOT NULL的TIMESTAMP都允許空值。

如果禁用explicit_defaults_for_timestamp,服務(wù)器將按如下方式處理TIMESTAMP:

除非另有指定,否則表中的第一個(gè)TIMESTAMP列定義為,如果未顯式分配值,則自動(dòng)設(shè)置為最近修改的日期和時(shí)間。這使得TIMESTAMP對(duì)于記錄INSERT或UPDATE操作的時(shí)間戳非常有用。

如果TIMESTAMP列沒(méi)有被定義為NULL,為它分配N(xiāo)ULL值就相當(dāng)于分配了當(dāng)前日期和時(shí)間。

可以使用DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP列定義子句自動(dòng)初始化或更新到當(dāng)前日期和時(shí)間。默認(rèn)情況下,如前所述,第一個(gè)TIMESTAMP列具有這些屬性。但是,表中的任何TIMESTAMP列都可以定義為具有這些屬性。

●TIME[(fsp)]

時(shí)間。范圍是'-838:59:59.000000'到'838:59:59.000000'。MySQL以'hh:mm:ss[.fraction]'格式顯示TIME值,但允許使用字符串或數(shù)字將值分配給TIME列。

可以給出0到6范圍內(nèi)的可選fsp值,以指定小數(shù)秒精度。值為0表示不存在小數(shù)部分。如果省略,則默認(rèn)精度為0。

●YEAR[(4)]

四位數(shù)格式的年。MySQL以YYYY格式顯示YEAR值,但允許使用字符串或數(shù)字將值分配給YEAR列。值顯示范圍從1901到2155,或者0000。

SUM()和AVG()聚合函數(shù)不能處理時(shí)間值。(它們將值轉(zhuǎn)換為數(shù)字,將丟棄第一個(gè)非數(shù)字字符之后所有內(nèi)容。)若要解決此問(wèn)題,請(qǐng)轉(zhuǎn)換為數(shù)字單位,執(zhí)行聚合操作,然后轉(zhuǎn)換回時(shí)間值。示例:

2.DATE、 DATETIME 和 TIMESTAMP類型

DATE、DATETIME 和 TIMESTAMP類型是相關(guān)的。本節(jié)介紹了它們的特點(diǎn)、相似之處和不同之處。MySQL可以識(shí)別多種格式的DATE、DATETIME和TIMESTAMP 值。

DATE類型用于具有日期但沒(méi)有時(shí)間部分的值。MySQL以'YYYY-MM-DD'格式檢索并顯示DATE值。支持的范圍是'1000-01-01'到'9999-12-31'。

DATETIME類型用于同時(shí)包含日期和時(shí)間部分的值。MySQL以'YYYY-MM-DD hh:MM:ss'格式檢索并顯示DATETIME值。支持的范圍是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。

TIMESTAMP數(shù)據(jù)類型用于包含日期和時(shí)間部分的值。TIMESTAMP的范圍是'1970-01-01 00:00:01' UTC到'2038-01-19 03:14:07' UTC。

DATETIME或TIMESTAMP值可以包含小數(shù)秒部分,最高達(dá)微秒(6位)精度。特別是,插入DATETIME或TIMESTAMP列中的任何小數(shù)部分都將被存儲(chǔ)而不是丟棄。包含小數(shù)部分時(shí),這些值的格式為'YYYY-MM-DD hh:MM:ss[.fraction]',DATETIME值的范圍為'1000-01-01 00:00:00.000000'到'9999-12-31 23:59:59.999999',TIMESTAMP值的范圍為'1970-01-01 00:00:01.000000'到'2038-01-19 03:14:07.999999'。小數(shù)部分應(yīng)始終與其余時(shí)間用小數(shù)點(diǎn)分隔;不能用其他小數(shù)秒分隔符。

MySQL存儲(chǔ)時(shí)將TIMESTAMP值從當(dāng)前時(shí)區(qū)轉(zhuǎn)換為UTC,檢索時(shí)從UTC轉(zhuǎn)換為當(dāng)前時(shí)區(qū)。(其他類型(如DATETIME)不會(huì)發(fā)生這種情況。)默認(rèn)情況下,每個(gè)連接的當(dāng)前時(shí)區(qū)是服務(wù)器的時(shí)間。時(shí)區(qū)可以根據(jù)每個(gè)連接進(jìn)行設(shè)置。只要時(shí)區(qū)設(shè)置保持不變,就可以得到存儲(chǔ)的相同值。如果存儲(chǔ)TIMESTAMP值,然后更改時(shí)區(qū)并檢索該值,則檢索到的值與存儲(chǔ)的值不同。發(fā)生這種情況的原因是沒(méi)有使用同一時(shí)區(qū)在兩個(gè)方向上進(jìn)行轉(zhuǎn)換。可以從系統(tǒng)變量 time_zone 中得到當(dāng)前時(shí)區(qū)。

從MySQL 8.0.19開(kāi)始,在向表中插入TIMESTAMP和DATETIME值時(shí),可以指定時(shí)區(qū)偏移量。偏移量被附加到日期時(shí)間后面(原文可能有誤,具體參加最下方原始文檔),不包含空格,并使用與設(shè)置 time_zone 系統(tǒng)變量相同的格式,但有以下例外情況:

●對(duì)于小于10的小時(shí)值,需要加前導(dǎo)零。

●不允許'-00:00'值。

●不能使用'EET'和'Asia/Shanghai'等時(shí)區(qū)名稱;也不能使用'SYSTEM'。

此示例演示如何使用不同的時(shí)區(qū)設(shè)置將帶有時(shí)區(qū)偏移的日期時(shí)間值插入TIMESTAMP和DATETIME列,然后檢索它們:

查詢結(jié)果中日期時(shí)間值不顯示偏移量,即使在插入時(shí)使用了偏移量。

支持的偏移量范圍為-14:00到+14:00(含)。

包含時(shí)區(qū)偏移量的日期時(shí)間字面值作為整體的參數(shù)值傳入語(yǔ)句。

如果SQL模式允許,則無(wú)效的DATE、DATETIME和TIMESTAMP值將轉(zhuǎn)換為對(duì)應(yīng)類型的"零"值('0000-00-00'或'0000-00-00 00:00')。具體行為取決于是否啟用了嚴(yán)格SQL模式或NO_ZERO_DATE SQL模式。

MySQL中日期值特定屬性釋義:

●MySQL允許對(duì)指定為字符串的值使用"寬松"格式,其中任何標(biāo)點(diǎn)字符都可以用作日期部分或時(shí)間部分之間的分隔符。在某些情況下,這種語(yǔ)法可能具有欺騙性。例如,'10:11:12'這樣的值因?yàn)?: 可能看起來(lái)像時(shí)間值,但如果在日期上下文中使用,則會(huì)被解釋為'2010-11-12'。值'10:45:15'轉(zhuǎn)換為'0000-00-00',因?yàn)?#39;45'不是有效的月份。

日期和時(shí)間部分與小數(shù)秒部分之間唯一可識(shí)別的分隔符是小數(shù)點(diǎn)。

●服務(wù)器要求月和日的值是有效的,而不僅僅是分別在1到12和1到31之間。禁用嚴(yán)格模式時(shí),無(wú)效日期(如'2004-04-31')將轉(zhuǎn)換為'0000-00-00',并生成警告。啟用嚴(yán)格模式時(shí),無(wú)效日期將引發(fā)錯(cuò)誤。若要允許此類日期,請(qǐng)啟用 ALLOW_INVALID_DATES。

●MySQL不接受在日或月值是0的TIMESTAMP值或不是有效日期的值。如果SQL模式允許,則此規(guī)則的唯一例外是特殊的零值'0000-00-00 00:00:00'。具體的行為取決于是否啟用了嚴(yán)格SQL模式和NO_ZERO_DATE SQL模式。

●包含兩位數(shù)年份的日期值不明確,因?yàn)槭兰o(jì)值未知。MySQL使用以下規(guī)則解釋2位數(shù)的年份值:

① 70-99之間的年份值將變?yōu)?970-1999。

② 00-69之間的年份值將變?yōu)?000-2069。

3.TIME 類型

MySQL以'hh:mm:ss'格式檢索和顯示TIME值(小時(shí)值數(shù)字大時(shí)用'hhh:mm:ss'格式)。TIME值的范圍從'-838:59:59'到'838:59:59'。小時(shí)值可能很大,因?yàn)闀r(shí)間類型不僅可以用來(lái)表示一天中的某個(gè)時(shí)間(必須小于24小時(shí)),還可以表示經(jīng)過(guò)的時(shí)間或兩個(gè)事件的時(shí)間間隔(可能遠(yuǎn)遠(yuǎn)大于24小時(shí),甚至為負(fù))。

MySQL可以識(shí)別多種格式的TIME值,其中一些格式可以包含最高達(dá)微秒(6位)精度的小數(shù)秒部分。特別是,插入TIME列的值中的任何小數(shù)部分都將被存儲(chǔ)而不是丟棄。包含小數(shù)部分時(shí),TIME值的范圍為'-838:59:59.000000'到'838:59:59.000000'。

將縮寫(xiě)值分配給TIME列時(shí)請(qǐng)務(wù)必當(dāng)心。MySQL將帶有冒號(hào)的縮寫(xiě)TIME值解釋為一天中的時(shí)間。例如,'11:12'是指'11:12:00',而不是'00:11:12'。如果縮寫(xiě)值不含冒號(hào),MySQL使用最右邊的兩個(gè)數(shù)字表示秒(即,這個(gè)時(shí)間是一段時(shí)間而不是一天中的某個(gè)時(shí)間)。例如,您可能認(rèn)為'1112'和1112表示'11:12:00'(11點(diǎn)12分鐘),但MySQL將其解釋為'00:11:12'(11分鐘12秒)。類似地,'12'和12被解釋為'00:00:12'。

時(shí)間部分和小數(shù)秒部分之間唯一可識(shí)別的分隔符是小數(shù)點(diǎn)。

默認(rèn)情況下,位于TIME范圍之外但在其他情況下有效的值將被剪裁到范圍的最近端點(diǎn)。例如,'-850:00:00'和'850:00:00'轉(zhuǎn)換為'-838:59:59'和'838:59:59'。無(wú)效的TIME值轉(zhuǎn)換為'00:00:00'。請(qǐng)注意,由于'00:00:00'本身是一個(gè)有效的TIME值,因此無(wú)法從存儲(chǔ)在表中的'00:00:00'值判斷原始值是指定為'00:00:00'還是一個(gè)無(wú)效值。

4.YEAR 類型

YEAR類型是一個(gè)1字節(jié)數(shù)據(jù)類型,用于表示年份值。它可以聲明為隱式顯示寬度為4個(gè)字符的年份,也可以顯式聲明顯示寬度YEAR(4),和隱式聲明效果是等同的。

從MySQL 8.0.19開(kāi)始,不推薦使用具有顯式顯示寬度的YEAR(4)數(shù)據(jù)類型,并且在以后的MySQL版本中將刪除對(duì)它的支持。請(qǐng)使用不帶顯示寬度的年份,其含義相同。

MySQL 8.0不支持舊版本MySQL中允許的2位數(shù)YEAR(2)數(shù)據(jù)類型。

MySQL以YYYY格式顯示YEAR值,范圍是1901到2155和0000。

YEAR接受多種格式的輸入值:

●'1901'到'2155'范圍內(nèi)的4位字符串。

●1901到2155范圍內(nèi)的4位數(shù)字。

●'0'到'99'范圍內(nèi)的1位或2位字符串。MySQL將范圍'0'到'69'和'70'到'99'的值分別轉(zhuǎn)換為2000到2069和1970到1999之間的YEAR值。

●0到99范圍內(nèi)的1位或2位數(shù)字。MySQL將范圍為1到69、70到99的值分別轉(zhuǎn)換為范圍為2001到2069和1970到1999的YEAR值。

插入數(shù)字0的結(jié)果的顯示值為0000,內(nèi)部值為0000。若要插入零并將其解釋為2000,請(qǐng)將其指定為字符串'0'或'00'。

●YEAR可接受的函數(shù)返回結(jié)果,例如NOW()。

如果沒(méi)有啟用嚴(yán)格的SQL模式,MySQL會(huì)將無(wú)效的YEAR值轉(zhuǎn)換為0000。在嚴(yán)格的SQL模式下,嘗試插入無(wú)效的YEAR值會(huì)引發(fā)錯(cuò)誤。

文章來(lái)源: blog.51cto.com,作者:數(shù)據(jù)雜貨鋪,版權(quán)歸原作者所有,如需轉(zhuǎn)載,請(qǐng)聯(lián)系作者。

原文鏈接:blog.51cto.com/15023289/2561177

總結(jié)

以上是生活随笔為你收集整理的mysql提供了表示日期和时间的数据类型_MySQL数据类型 - 日期和时间类型(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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