最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文帶你玩轉(zhuǎn)MySQL獲取時間和格式轉(zhuǎn)換各類操作方法詳解

 更新時間:2022年08月16日 11:36:47   作者:fanstuck  
最近在開發(fā)中常常使用時間的轉(zhuǎn)換函數(shù),所以一直都想整理一下這些函數(shù),下面這篇文章主要給大家介紹了關(guān)于MySQL獲取時間和格式轉(zhuǎn)換各類操作方法的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

時間在數(shù)據(jù)庫中經(jīng)常作為時間索引,在數(shù)據(jù)入庫和出庫以及更新的時候都需要變化。在一些指標(biāo)計算或者是提取某段時間的數(shù)據(jù)時,都會根據(jù)數(shù)據(jù)庫中的時間索引數(shù)據(jù)進行操作。因此很大一部分我們操作數(shù)據(jù)都得先從時間數(shù)據(jù)下手,但是想要真正提取到我們想要的時間作為索引,還需要我們掌握許多功能函數(shù)方便我們操作,這是一個比較復(fù)雜的運用過程。因此特地寫下這篇文章,記錄一些十分好用常用的處理數(shù)據(jù)庫SQL時間數(shù)據(jù)的函數(shù),以及實例運用這些函數(shù)完成一些復(fù)雜查詢?nèi)蝿?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ū)別

  1. 存儲方式不同,對于TIMESTAMP,它把客戶端插入的時間從當(dāng)前時區(qū)轉(zhuǎn)化為UTC(世界標(biāo)準(zhǔn)時間)進行存儲。查詢時,將其又轉(zhuǎn)化為客戶端當(dāng)前時區(qū)進行返回。而對于DATETIME,不做任何改變,基本上是原樣輸入和輸出.
  2. 存儲的時間范圍也不一樣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’。 
  3. timestamp有一個機制是自動初始化與更新,意思就是如果插入數(shù)據(jù)的時候沒有對該值進行賦值,則自動寫入當(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這種類型格式來進行。

 這種就需要提取出來后期處理,轉(zhuǎ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 time

 以上均為獲得具體時間的函數(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。

我們可以修改表再看:

2.convert()

基礎(chǔ)語法格式:

convert(<數(shù)據(jù)>,<數(shù)據(jù)類型>)

select CONVERT(time ,date) as timefrom value_test

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

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

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

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

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

 可見兼容能力是很強的。

如果是時間都是統(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

2.convert() 

select convert(create_time ,signed) as timefrom value_test

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 time
from value_test

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

參閱:

mysql 日期類型轉(zhuǎn)換

總結(jié)

到此這篇關(guān)于MySQL獲取時間和格式轉(zhuǎn)換各類操作方法的文章就介紹到這了,更多相關(guān)MySQL獲取時間和格式轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL Order By語法介紹

    MySQL Order By語法介紹

    今天在使用ORDER BY的過程中出現(xiàn)了一點問題,發(fā)現(xiàn)之前對ORDER BY理解是錯誤的
    2012-07-07
  • MySQL8.0 Undo Tablespace管理詳解

    MySQL8.0 Undo Tablespace管理詳解

    本文主要介紹了MySQL8.0 Undo Tablespace管理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • mysql8.0?lower_case_table_names?大小寫敏感設(shè)置問題解決

    mysql8.0?lower_case_table_names?大小寫敏感設(shè)置問題解決

    在默認(rèn)情況下,這個變量是設(shè)置為0的,以保持向前兼容性,如果將該變量設(shè)置為1,則表名和數(shù)據(jù)庫名將被區(qū)分大小寫,本文主要介紹了mysql8.0?lower_case_table_names?大小寫敏感設(shè)置問題解決,感興趣的可以了解一下
    2023-09-09
  • linux下如何使用yum源安裝mysql

    linux下如何使用yum源安裝mysql

    這篇文章主要介紹了linux下如何使用yum源安裝mysql問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • MySql 8.0.16-win64 安裝教程

    MySql 8.0.16-win64 安裝教程

    本文通過圖文并茂的形式給大家介紹了MySql 8.0.16-win64 安裝教程 ,需要的朋友可以參考下
    2019-06-06
  • Oracle與MySQL的區(qū)別及優(yōu)缺點

    Oracle與MySQL的區(qū)別及優(yōu)缺點

    這篇文章主要介紹了Oracle與MySQL的區(qū)別及優(yōu)缺點,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參加一下
    2022-08-08
  • mysql中如何按分組添加序號

    mysql中如何按分組添加序號

    這篇文章主要介紹了mysql中如何按分組添加序號問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • MySQL中create table as 與like的區(qū)別分析

    MySQL中create table as 與like的區(qū)別分析

    這篇文章主要介紹了MySQL中create table as 與like的區(qū)別,結(jié)合實例分析了二者在使用中的具體區(qū)別與主要用途,需要的朋友可以參考下
    2016-01-01
  • 史上最全的MySQL備份方法

    史上最全的MySQL備份方法

    史上最全的MySQL備份方法,需要的朋友可以參考下。
    2010-03-03
  • 用批處理實現(xiàn)自動備份和清理mysql數(shù)據(jù)庫的代碼

    用批處理實現(xiàn)自動備份和清理mysql數(shù)據(jù)庫的代碼

    有網(wǎng)友問我在win2003下如何自動備份MySQL數(shù)據(jù)庫,既然是自動備份,那肯定得寫腳本,當(dāng)然我們也可以利用軟件實現(xiàn)
    2013-08-08

最新評論

威海市| 江都市| 梨树县| 历史| 祁门县| 巩留县| 西峡县| 永昌县| 萍乡市| 介休市| 金华市| 北安市| 望江县| 德阳市| 体育| 沈阳市| 塘沽区| 攀枝花市| 芷江| 吉首市| 深州市| 图木舒克市| 旅游| 察隅县| 哈密市| 南澳县| 灌阳县| 景东| 临夏市| 讷河市| 宜宾市| 鸡西市| 兴宁市| 金溪县| 察雅县| 金秀| 资阳市| 福泉市| 清苑县| 仙游县| 马尔康县|