<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
時間在資料庫中經常作為時間索引,在資料入庫和出庫以及更新的時候都需要變化。在一些指標計算或者是提取某段時間的資料時,都會根據資料庫中的時間索引資料進行操作。因此很大一部分我們運算元據都得先從時間資料下手,但是想要真正提取到我們想要的時間作為索引,還需要我們掌握許多功能函數方便我們操作,這是一個比較複雜的運用過程。因此特地寫下這篇文章,記錄一些十分好用常用的處理資料庫SQL時間資料的函數,以及範例運用這些函數完成一些複雜查詢任務。
首先要玩好處理時間的操作,要先明白此資料型別能夠幹什麼事,有什麼用。MySQL中經常用來儲存日期的資料型別有三種:Date、Datetime、Timestamp。
日曆日期,例如:‘2022-6-17’.format形式為:%Y-%m-%d。在其他語言中,像Python、JAVA等利用函數輸出Date都為yyyy-mm-dd的形式,業務精確到天就用這個格式。
具體時間日期 例如:'2022-6-17 17:00:22' format格式為:%Y-%m-%d %H:%M:%s.當業務需求中需要精確到秒時,可以用這個時間格式。
具體時間不包括日期,例如:'17:11:00' format格式為:%H:%M:%s。當業務需求中只需要每天的時間,可以用這個時間格式。
和datetime儲存型別一樣,也是既儲存時間又儲存日期。format格式為:%Y-%m-%d %H:%M:%s.
PS.datetime與timestamp的區別
對比總結
有時候儲存入庫格式不是固定的,可能出現入庫時間精確到日或者是小時又可能只有月,這種靈活不固定的時間就只能使用字串或者是BIGINT這種型別格式來進行。
這種就需要提取出來後期處理,轉換為時間格式進行計算或者進行邏輯運算得到自己想要的時間。
獲取當地具體日期和時間:
select now() as time
獲取當地具體日期和時間,與now()一樣:
select LOCALTIME() as time
獲取當地具體日期和時間,與now()一樣:
select current_timestamp() as time
獲取當地具體日期和時間,與now()一樣:
select LOCALTIMESTAMP() as time
以上這4種函數功能都與now()功能一樣獲取當地具體日期和時間,平常使用一個now()就好了好記。
獲取當地具體日期和時間,與now()上述幾個函數不一樣的是,now()在執行該函數之前就已得到了。
select sysdate() as time
以上函數均為獲取具體日期和時間。
獲取當地具體日期:
select curdate() as time
獲取當地具體日期,和curdate()函數功能一樣:
select current_date() as time
以上函數均為獲取具體日期。
獲取具體的時間:
select curtime() as time
獲取具體的時間:
select current_time() as time
以上均為獲得具體時間的函數。
獲取UTC時間的日期,因為我們是東八時區要快8個小時,本地時間=UTC時間+8小時。
select utc_date() as time
由於博主現在是晚上九點所以還是6月17日,如果是早上八點之前就是6月16號了。
獲取UTC時間的時間。
select utc_time() as time
獲取UTC時間的具體日期和時間,在做跨國業務時非常有用。
select utc_timestamp() as time
以上為獲取UTC時間函數。
獲取系統具體小時:
select HOUR(SYSDATE()) as time
獲取當前系統分鐘:
select MINUTE(SYSDATE()) as time
其他獲取year,month,day,second,microsecond都可以通過這種方法獲得,這裡不再演示。
如果是用BIGINT或者是字串varchar儲存的時間資料就需要將該列資料轉換為時間資料,或者輸入一個字串想要轉化為時間格式都需要轉換函數,這裡詳細介紹各種方法解決這種問題:
基礎語法格式:
cast( <資料> as <資料型別> )
可轉換的型別有字串varchar、日期date、時間time、日期時間datetime、浮點型decimal、整數signed、無符號整數unsigned。
例如我們拿到展示的sql表格:
該列型別為BIGINT:
下面直接用cast轉換為時間型別:
select cast(time as date) as timefrom value_test
可見如果有與其他format不對應,只記錄到月或者記錄到小時時,將不能識別轉為時間型別。也可以切換成time或是datetime:
select cast(time as datetime) as timefrom value_test
select cast(time as time) as timefrom value_test
只要是有6個字元的都會被識別為%H:%M:s。
我們可以修改表再看:
基礎語法格式:
convert(<資料>,<資料型別>)
select CONVERT(time ,date) as timefrom value_test
和上述cast的功能一樣,但是cast是強制轉換。
所以說如果涉及到記錄有多個不同維度的時間資料儲存的時候,一般是不用資料庫時間型別去做儲存的。看cast的例子就可以看出。
str_to_date()函數可以將時間格式的字串按照所指定的顯示格式(format)轉換為不同的時間型別。
基礎語法格式:
str_to_date(<字串>,<format格式>')
select str_to_date(time,'%Y%m%d') as timefrom value_test
這個函數自由性要比cast和convert的自由性高很多,可以自由定義format,但是不會僅顯示單個年或日,後面會根據字元的長度補零填充:
select str_to_date(time,'%Y') as timefrom value_test
這裡我們可以更改表格的時間觀察是否不滿足或者超過標準的時間格式能夠被識別:
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
可見相容能力是很強的。
如果是時間都是統一格式記錄的直接使用cast或者convert快速轉換為時間格式就好了,若是記錄的有多個維度的時間應該使用str_to_date函數來轉換。
時間轉換一般是把時間類似資料轉換為其他型別資料,以上例子cast()函數和convert()函數都可以做到。改變一下位置就好了,由於上述已經提到這裡就做兩個簡單的例子展示:
select cast(create_time as signed) as timefrom value_test
select convert(create_time ,signed) as timefrom value_test
其實最主要的還是使用data_format(),date_format()函數可以以不同的格式顯示日期/時間資料,可以實現日期轉換成字串。也就是將時間資料讀取之後按照format形式轉換為字串輸出,當然轉換為了字串我們又可以轉為其他的格式。
語法格式:
date_format(<時間型別資料>,<format格式>)
其中format的格式引數可選的有:
格式 | 描述 |
%a | 星期名縮寫 |
%b | 月名縮寫 |
%c | 代表幾月的數值 |
%D | 帶時序字尾的數值-天 |
%d | 天數,數值(00-31) |
%e | 天數,數值(0-31) |
%f | 微秒 |
%H | 小時 (00-23) |
%h | 小時 (01-12) |
%I | 小時 (01-12) |
%i | 分鐘,數值(00-59) |
%j | 轉換為天數 (001-366) |
%k | 小時 (0-23) |
%l | 小時 (1-12) |
%M | 月名 |
%m | 月,數值(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 | 當前周的天數,(0=星期日, 6=星期六) |
%X | 年,其中的星期日是周的第一天,4 位,與 %V 使用 |
%x | 年,其中的星期一是周的第一天,4 位,與 %v 使用 |
%Y | 年,4 位 |
%y | 年,2 位 |
自己大家可自己隨意組合使用:
select date_format(create_time, '%x%v') as time from value_test
但是記住轉換輸出的都為字串,轉換為其他型別都需要再次轉換。
參閱:
到此這篇關於MySQL獲取時間和格式轉換各類操作方法的文章就介紹到這了,更多相關MySQL獲取時間和格式轉換內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45