久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL獲取時間、格式轉(zhuǎn)換各類操作的方法是什么

130次閱讀
沒有評論

共計 4587 個字符,預(yù)計需要花費 12 分鐘才能閱讀完成。

本篇內(nèi)容介紹了“MySQL 獲取時間、格式轉(zhuǎn)換各類操作的方法是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

一、SQL 時間存儲類型

首先要玩好處理時間的操作,要先明白此數(shù)據(jù)類型能夠干什么事,有什么用。MySQL 中經(jīng)常用來存儲日期的數(shù)據(jù)類型有三種:Date、Datetime、Timestamp。

1.date

日歷日期,例如:‘2022-6-17’.format 形式為:%Y-%m-%d。在其他語言中,像 Python、JAVA 等利用函數(shù)輸出 Date 都為 yyyy-mm-dd 的形式,業(yè)務(wù)精確到天就用這個格式。

2.datetime

具體時間日期 例如:2022-6-17 17:00:22 format 格式為:%Y-%m-%d %H:%M:%s. 當(dāng)業(yè)務(wù)需求中需要精確到秒時,可以用這個時間格式。

3.time

具體時間不包括日期,例如: 17:11:00 format 格式為:%H:%M:%s。當(dāng)業(yè)務(wù)需求中只需要每天的時間,可以用這個時間格式。

4.timestamp

和 datetime 存儲類型一樣,也是既存儲時間又存儲日期。format 格式為:%Y-%m-%d %H:%M:%s.

PS.datetime 與 timestamp 的區(qū)別

存儲方式不同,對于 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 有一個機制是自動初始化與更新, 意思就是如果插入數(shù)據(jù)的時候沒有對該值進(jìn)行賦值,則自動寫入當(dāng)前的 [時間戳] 對應(yīng)的格式。在更新其他字段的時候該自動會自動更新到當(dāng)前的時間

對比總結(jié)

timestamp 和 datetime 除了存儲范圍和存儲方式不一樣,沒有太大區(qū)別。如果對于跨時區(qū)的業(yè)務(wù),TIMESTAMP 更為合適

timestamp 有自動初始化和更新,當(dāng)你 update 某條記錄的時候,該列值會自動更新,這是和 datatime 最大的區(qū)別

5.varchar/bigint

有時候存儲入庫格式不是固定的,可能出現(xiàn)入庫時間精確到日或者是小時又可能只有月,這種靈活不固定的時間就只能使用字符串或者是 BIGINT 這種類型格式來進(jìn)行。

這種就需要提取出來后期處理,轉(zhuǎn)換為時間格式進(jìn)行計算或者進(jìn)行邏輯運算得到自己想要的時間。

二、獲取時間 1.now()

獲取當(dāng)?shù)鼐唧w日期和時間:

select now() as time

2.localtime()

獲取當(dāng)?shù)鼐唧w日期和時間,與 now()一樣:

select LOCALTIME() as time

3.current_timestamp()

獲取當(dāng)?shù)鼐唧w日期和時間,與 now()一樣:

select current_timestamp() as time

4.localtimestamp()

獲取當(dāng)?shù)鼐唧w日期和時間,與 now()一樣:

select LOCALTIMESTAMP() as time

以上這 4 種函數(shù)功能都與 now()功能一樣獲取當(dāng)?shù)鼐唧w日期和時間,平常使用一個 now()就好了好記。

5.sysdate()

獲取當(dāng)?shù)鼐唧w日期和時間,與 now()上述幾個函數(shù)不一樣的是,now()在執(zhí)行該函數(shù)之前就已得到了。

select sysdate() as time

以上函數(shù)均為獲取具體日期和時間。

6.curdate()

獲取當(dāng)?shù)鼐唧w日期:

select curdate() as time

7.current_time()

獲取當(dāng)?shù)鼐唧w日期,和 curdate()函數(shù)功能一樣:

select current_date() as time

以上函數(shù)均為獲取具體日期。

8. curtime()

獲取具體的時間:

select curtime() as time

9.current_time()

獲取具體的時間:

select current_time() as

以上均為獲得具體時間的函數(shù)。

10. utc_date()

獲取 UTC 時間的日期,因為我們是東八時區(qū)要快 8 個小時,本地時間 =UTC 時間 + 8 小時。

select utc_date() as time

由于博主現(xiàn)在是晚上九點所以還是 6 月 17 日,如果是早上八點之前就是 6 月 16 號了。

11.utc_time

獲取 UTC 時間的時間。

select utc_time() as time

12.utc_timestamp()

獲取 UTC 時間的具體日期和時間,在做跨國業(yè)務(wù)時非常有用。

select utc_timestamp() as time

以上為獲取 UTC 時間函數(shù)。

13.HOUR(SYSDATE())

獲取系統(tǒng)具體小時:

select HOUR(SYSDATE()) as time

14.MINUTE(SYSDATE())

獲取當(dāng)前系統(tǒng)分鐘:

select MINUTE(SYSDATE()) as time

其他獲取 year,month,day,second,microsecond 都可以通過這種方法獲得,這里不再演示。

三、轉(zhuǎn)換時間

如果是用 BIGINT 或者是字符串 varchar 存儲的時間數(shù)據(jù)就需要將該列數(shù)據(jù)轉(zhuǎn)換為時間數(shù)據(jù),或者輸入一個字符串想要轉(zhuǎn)化為時間格式都需要轉(zhuǎn)換函數(shù),這里詳細(xì)介紹各種方法解決這種問題:

1.cast()

基礎(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。

我們可以修改表再看:

MySQL 獲取時間、格式轉(zhuǎn)換各類操作的方法是什么

2.convert()

基礎(chǔ)語法格式:

convert(數(shù)據(jù) , 數(shù)據(jù)類型)
select CONVERT(time ,date) as timefrom value_test

MySQL 獲取時間、格式轉(zhuǎn)換各類操作的方法是什么

和上述 cast 的功能一樣,但是 cast 是強制轉(zhuǎn)換。

所以說如果涉及到記錄有多個不同維度的時間數(shù)據(jù)存儲的時候,一般是不用數(shù)據(jù)庫時間類型去做存儲的???cast 的例子就可以看出。

3.str_to_date()

str_to_date()函數(shù)可以將時間格式的字符串按照所指定的顯示格式(format)轉(zhuǎn)換為不同的時間類型。

基礎(chǔ)語法格式:

str_to_date(字符串 , format 格式)
select str_to_date(time, %Y%m%d) as timefrom value_test

MySQL 獲取時間、格式轉(zhuǎn)換各類操作的方法是什么

這個函數(shù)自由性要比 cast 和 convert 的自由性高很多,可以自由定義 format,但是不會僅顯示單個年或日,后面會根據(jù)字符的長度補零填充:

select str_to_date(time, %Y) as timefrom value_test

MySQL 獲取時間、格式轉(zhuǎn)換各類操作的方法是什么

這里我們可以更改表格的時間觀察是否不滿足或者超過標(biāo)準(zhǔn)的時間格式能夠被識別:

MySQL 獲取時間、格式轉(zhuǎn)換各類操作的方法是什么

select str_to_date(time, %Y%m%d) as timefrom value_test

MySQL 獲取時間、格式轉(zhuǎn)換各類操作的方法是什么

select str_to_date(time, %Y%m%d%H%i%S) as timefrom value_test

MySQL 獲取時間、格式轉(zhuǎn)換各類操作的方法是什么

可見兼容能力是很強的。

如果是時間都是統(tǒng)一格式記錄的直接使用 cast 或者 convert 快速轉(zhuǎn)換為時間格式就好了,若是記錄的有多個維度的時間應(yīng)該使用 str_to_date 函數(shù)來轉(zhuǎn)換。

四、時間轉(zhuǎn)換

時間轉(zhuǎn)換一般是把時間類似數(shù)據(jù)轉(zhuǎn)換為其他類型數(shù)據(jù),以上例子 cast()函數(shù)和 convert()函數(shù)都可以做到。改變一下位置就好了,由于上述已經(jīng)提到這里就做兩個簡單的例子展示:

1.cast()

select cast(create_time as signed) as timefrom value_test

MySQL 獲取時間、格式轉(zhuǎn)換各類操作的方法是什么

2.convert()

select convert(create_time ,signed) as timefrom value_test

MySQL 獲取時間、格式轉(zhuǎn)換各類操作的方法是什么

3.date_format()

其實最主要的還是使用 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)
%pAM 或 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

MySQL 獲取時間、格式轉(zhuǎn)換各類操作的方法是什么

但是記住轉(zhuǎn)換輸出的都為字符串,轉(zhuǎn)換為其他類型都需要再次轉(zhuǎn)換.

“MySQL 獲取時間、格式轉(zhuǎn)換各類操作的方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編將為大家輸出更多高質(zhì)量的實用文章!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-13發(fā)表,共計4587字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 婺源县| 陆良县| 云和县| 华安县| 洪洞县| 九江市| 嘉兴市| 朝阳县| 邢台市| 简阳市| 双峰县| 友谊县| 仪陇县| 江阴市| 宁南县| 孝义市| 石狮市| 荔浦县| 肇东市| 永康市| 宁国市| 海门市| 德州市| 贵德县| 教育| 长汀县| 巨野县| 集安市| 石狮市| 岢岚县| 卓资县| 阳原县| 宽城| 福海县| 修文县| 荣成市| 肇东市| 宣威市| 陵川县| 永仁县| 扎鲁特旗|