本篇內(nèi)容介紹了“MySQL獲取時間、格式轉(zhuǎn)換各類操作的方法是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)建站是一家專業(yè)提供翁牛特企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計、成都網(wǎng)站設(shè)計、H5技術(shù)、小程序制作等業(yè)務(wù)。10年已為翁牛特眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計公司優(yōu)惠進(jìn)行中。
首先要玩好處理時間的操作,要先明白此數(shù)據(jù)類型能夠干什么事,有什么用。MySQL中經(jīng)常用來存儲日期的數(shù)據(jù)類型有三種:Date、Datetime、Timestamp。
日歷日期,例如:‘2022-6-17’.format形式為:%Y-%m-%d。在其他語言中,像Python、JAVA等利用函數(shù)輸出Date都為yyyy-mm-dd的形式,業(yè)務(wù)精確到天就用這個格式。
具體時間日期 例如:'2022-6-17 17:00:22' format格式為:%Y-%m-%d %H:%M:%s.當(dāng)業(yè)務(wù)需求中需要精確到秒時,可以用這個時間格式。
具體時間不包括日期,例如:'17:11:00' format格式為:%H:%M:%s。當(dāng)業(yè)務(wù)需求中只需要每天的時間,可以用這個時間格式。
和datetime存儲類型一樣,也是既存儲時間又存儲日期。format格式為:%Y-%m-%d %H:%M:%s.
存儲方式不同,對于TIMESTAMP,它把客戶端插入的時間從當(dāng)前時區(qū)轉(zhuǎn)化為UTC(世界標(biāo)準(zhǔn)時間)進(jìn)行存儲。查詢時,將其又轉(zhuǎn)化為客戶端當(dāng)前時區(qū)進(jìn)行返回。而對于DATETIME,不做任何改變,基本上是原樣輸入和輸出.
存儲的時間范圍也不一樣timestamp所能存儲的時間范圍為:’1970-01-01 00:00:01.000000’ 到 ‘2038-01-19 03:14:07.999999’。 datetime所能存儲的時間范圍為:’1000-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’。
timestamp有一個機(jī)制是自動初始化與更新,意思就是如果插入數(shù)據(jù)的時候沒有對該值進(jìn)行賦值,則自動寫入當(dāng)前的[時間戳]對應(yīng)的格式。在更新其他字段的時候該自動會自動更新到當(dāng)前的時間
timestamp和datetime除了存儲范圍和存儲方式不一樣,沒有太大區(qū)別。如果對于跨時區(qū)的業(yè)務(wù),TIMESTAMP更為合適
timestamp有自動初始化和更新,當(dāng)你update某條記錄的時候,該列值會自動更新,這是和datatime最大的區(qū)別
有時候存儲入庫格式不是固定的,可能出現(xiàn)入庫時間精確到日或者是小時又可能只有月,這種靈活不固定的時間就只能使用字符串或者是BIGINT這種類型格式來進(jìn)行。
這種就需要提取出來后期處理,轉(zhuǎn)換為時間格式進(jìn)行計算或者進(jìn)行邏輯運算得到自己想要的時間。
獲取當(dāng)?shù)鼐唧w日期和時間:
select now() as time
獲取當(dāng)?shù)鼐唧w日期和時間,與now()一樣:
select LOCALTIME() as time
獲取當(dāng)?shù)鼐唧w日期和時間,與now()一樣:
select current_timestamp() as time
獲取當(dāng)?shù)鼐唧w日期和時間,與now()一樣:
select LOCALTIMESTAMP() as time
以上這4種函數(shù)功能都與now()功能一樣獲取當(dāng)?shù)鼐唧w日期和時間,平常使用一個now()就好了好記。
獲取當(dāng)?shù)鼐唧w日期和時間,與now()上述幾個函數(shù)不一樣的是,now()在執(zhí)行該函數(shù)之前就已得到了。
select sysdate() as time
以上函數(shù)均為獲取具體日期和時間。
獲取當(dāng)?shù)鼐唧w日期:
select curdate() as time
獲取當(dāng)?shù)鼐唧w日期,和curdate()函數(shù)功能一樣:
select current_date() as time
以上函數(shù)均為獲取具體日期。
獲取具體的時間:
select curtime() as time
獲取具體的時間:
select current_time() as
以上均為獲得具體時間的函數(shù)。
獲取UTC時間的日期,因為我們是東八時區(qū)要快8個小時,本地時間=UTC時間+8小時。
select utc_date() as time
由于博主現(xiàn)在是晚上九點所以還是6月17日,如果是早上八點之前就是6月16號了。
獲取UTC時間的時間。
select utc_time() as time
獲取UTC時間的具體日期和時間,在做跨國業(yè)務(wù)時非常有用。
select utc_timestamp() as time
以上為獲取UTC時間函數(shù)。
獲取系統(tǒng)具體小時:
select HOUR(SYSDATE()) as time
獲取當(dāng)前系統(tǒng)分鐘:
select MINUTE(SYSDATE()) as time
其他獲取year,month,day,second,microsecond都可以通過這種方法獲得,這里不再演示。
如果是用BIGINT或者是字符串varchar存儲的時間數(shù)據(jù)就需要將該列數(shù)據(jù)轉(zhuǎn)換為時間數(shù)據(jù),或者輸入一個字符串想要轉(zhuǎn)化為時間格式都需要轉(zhuǎn)換函數(shù),這里詳細(xì)介紹各種方法解決這種問題:
基礎(chǔ)語法格式:
cast( <數(shù)據(jù)> as <數(shù)據(jù)類型> )
可轉(zhuǎn)換的類型有字符串varchar、日期date、時間time、日期時間datetime、浮點型decimal、整數(shù)signed、無符號整數(shù)unsigned。
例如我們拿到展示的sql表格:
該列類型為BIGINT:
下面直接用cast轉(zhuǎn)換為時間類型:
select cast(time as date) as timefrom value_test
可見如果有與其他format不對應(yīng),只記錄到月或者記錄到小時時,將不能識別轉(zhuǎn)為時間類型。也可以切換成time或是datetime:
select cast(time as datetime) as timefrom value_test
select cast(time as time) as timefrom value_test
只要是有6個字符的都會被識別為%H:%M:s。
我們可以修改表再看:
基礎(chǔ)語法格式:
convert(<數(shù)據(jù)>,<數(shù)據(jù)類型>)
select CONVERT(time ,date) as timefrom value_test
和上述cast的功能一樣,但是cast是強(qiáng)制轉(zhuǎn)換。
所以說如果涉及到記錄有多個不同維度的時間數(shù)據(jù)存儲的時候,一般是不用數(shù)據(jù)庫時間類型去做存儲的。看cast的例子就可以看出。
str_to_date()函數(shù)可以將時間格式的字符串按照所指定的顯示格式(format)轉(zhuǎn)換為不同的時間類型。
基礎(chǔ)語法格式:
str_to_date(<字符串>,<format格式>')
select str_to_date(time,'%Y%m%d') as timefrom value_test
這個函數(shù)自由性要比cast和convert的自由性高很多,可以自由定義format,但是不會僅顯示單個年或日,后面會根據(jù)字符的長度補(bǔ)零填充:
select str_to_date(time,'%Y') as timefrom value_test
這里我們可以更改表格的時間觀察是否不滿足或者超過標(biāo)準(zhǔn)的時間格式能夠被識別:
select str_to_date(time,'%Y%m%d') as timefrom value_test
select str_to_date(time,'%Y%m%d%H%i%S') as timefrom value_test
可見兼容能力是很強(qiáng)的。
如果是時間都是統(tǒng)一格式記錄的直接使用cast或者convert快速轉(zhuǎn)換為時間格式就好了,若是記錄的有多個維度的時間應(yīng)該使用str_to_date函數(shù)來轉(zhuǎn)換。
時間轉(zhuǎn)換一般是把時間類似數(shù)據(jù)轉(zhuǎn)換為其他類型數(shù)據(jù),以上例子cast()函數(shù)和convert()函數(shù)都可以做到。改變一下位置就好了,由于上述已經(jīng)提到這里就做兩個簡單的例子展示:
select cast(create_time as signed) as timefrom value_test
select convert(create_time ,signed) as timefrom value_test
其實最主要的還是使用data_format(),date_format()函數(shù)可以以不同的格式顯示日期/時間數(shù)據(jù),可以實現(xiàn)日期轉(zhuǎn)換成字符串。也就是將時間數(shù)據(jù)讀取之后按照format形式轉(zhuǎn)換為字符串輸出,當(dāng)然轉(zhuǎn)換為了字符串我們又可以轉(zhuǎn)為其他的格式。
語法格式:
date_format(<時間類型數(shù)據(jù)>,<format格式>)
其中format的格式參數(shù)可選的有:
格式 | 描述 | |
---|---|---|
%a | 星期名縮寫 | |
%b | 月名縮寫 | |
%c | 代表幾月的數(shù)值 | |
%D | 帶時序后綴的數(shù)值-天 | |
%d | 天數(shù),數(shù)值(00-31) | |
%e | 天數(shù),數(shù)值(0-31) | |
%f | 微秒 | |
%H | 小時 (00-23) | |
%h | 小時 (01-12) | |
%I | 小時 (01-12) | |
-- | -------------------------- | |
%i | 分鐘,數(shù)值(00-59) | |
%j | 轉(zhuǎn)換為天數(shù) (001-366) | |
%k | 小時 (0-23) | |
%l | 小時 (1-12) | |
%M | 月名 | |
%m | 月,數(shù)值(00-12) | |
%p | AM 或 PM | |
%r | 時間,12-小時(hh:mm:ss AM 或 PM) | |
%S | 秒(00-59) | |
%s | 秒(00-59)%T | 時間, 24-小時 (hh:mm:ss) |
-- | ----------------------------- | |
%U | 從年初首周開始計算 (00-53) 星期日是一周的第一天 | |
%u | 從年初首周開始計算 (00-53) 星期一是一周的第一天 | |
%V | 周 (01-53) 星期日是一周的第一天,與 %X 使用 | |
-- | ---------------------------- | |
%v | 周 (01-53) 星期一是一周的第一天,與 %x 使用 | |
%W | 星期名 | |
%w | 當(dāng)前周的天數(shù),(0=星期日, 6=星期六) | |
%X | 年,其中的星期日是周的第一天,4 位,與 %V 使用 | |
%x | 年,其中的星期一是周的第一天,4 位,與 %v 使用 | |
-- | -------------------------- | |
%Y | 年,4 位 | |
%y | 年,2 位 |
自己大家可自己隨意組合使用:
select date_format(create_time, '%x%v') as timefrom value_test
但是記住轉(zhuǎn)換輸出的都為字符串,轉(zhuǎn)換為其他類型都需要再次轉(zhuǎn)換.
“MySQL獲取時間、格式轉(zhuǎn)換各類操作的方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
網(wǎng)站標(biāo)題:MySQL獲取時間、格式轉(zhuǎn)換各類操作的方法是什么
瀏覽路徑:http://m.rwnh.cn/article22/jejgjc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、靜態(tài)網(wǎng)站、微信小程序、品牌網(wǎng)站制作、定制網(wǎng)站、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)