SQL中日期格式處理方法大全
背景:
實(shí)際工作,使用SQL語句對數(shù)據(jù)進(jìn)行處理,有一大部分工作是對日期時(shí)間型數(shù)據(jù)進(jìn)行處理,通過對字段的拼接或轉(zhuǎn)換生成實(shí)際需要的格式的日期字段。本文章盡可能全面記錄現(xiàn)在主流的數(shù)據(jù)庫(MySQL和Hive)對日期格式的處理,形成一份工作速查文檔,提升工作效率。
一、獲取當(dāng)前日期
MySQL
select now(); --日期時(shí)間格式 select current_date(); -- 日期格式 select current_time(); -- 時(shí)間格式 select sysdate(); -- 日期時(shí)間格式 select current_timestamp(); -- 日期時(shí)間戳
Hive
select current_date() -- 日期格式 select current_timestamp() -- 日期時(shí)間格式
sql server
select getdate() --獲得年月日 select convert(nvarchar(10),getdate(),120) --獲得年月 select convert(nvarchar(7),getdate(),120)
二、日期格式化
格式化可以將不符合要求規(guī)范的日期格式字段或字符串類型字段轉(zhuǎn)換為格式化日期。
MySQL
select date_format('20230613','%Y-%m-%d'); select date_format('20230613','%Y-%m-%d %H:%i:%s'); select date_format(now(),'%Y-%m-%d'); -- 可使用unix_timestamp函數(shù)獲取 unix 時(shí)間戳,使用時(shí)間格式轉(zhuǎn)換函數(shù)from_unixtime轉(zhuǎn)換為格式日期 select from_unixtime(unix_timestamp('20230613'), '%Y-%m-%d');
Hive
select date_format(current_timestamp(),'yyyy-MM-dd') -- Hive中對月份格式用MM select date_format(current_timestamp(),'yyyy-MM-dd HH:mm:ss') select from_unixtime(unix_timestamp('2023-06-13', 'yyyy-MM-dd'), 'yyyyMMdd') -- 生成20230613對應(yīng)格式的日期 -- unix_timestamp返回對應(yīng)時(shí)間戳 select unix_timestamp() -- 返回當(dāng)前時(shí)間對應(yīng)的時(shí)間戳,時(shí)間戳數(shù)值可以加減,如一小時(shí)3600秒,一天86400秒
sql server
select convert(datetime,'YYYY-MM-DD HH24:MI:SS') -- cast強(qiáng)制轉(zhuǎn)換 select cast('YYYY-MM-DD HH24:MI:SS' as datetime)
三、日期轉(zhuǎn)換為字符串
SQL表中存儲日期對數(shù)據(jù)類型有要求,特別是 hive存儲日期時(shí)間的時(shí)候通常用string,所以有時(shí)也要實(shí)現(xiàn)日期轉(zhuǎn)換為字符串。
MySQL
-- 可使用substr字符串切割函數(shù),返回從m開始長度為n的字符串 select substr(now(),1,10); -- 使用concat字符串拼接函數(shù) select concat(substr(now(),1,4),substr(now(),6,2));
Hive
-- 使用cast強(qiáng)制轉(zhuǎn)換為字符串 select cast(from_unixtime(unix_timestamp('20230613', 'yyyyMMdd'), 'yyyy-MM-dd') as string)
sql server
-- select convert(nvarchar(10),getdate(),120) -- 常用格式 Select CONVERT(varchar(100), GETDATE(), 120) -- 年月日 時(shí)分秒 Select CONVERT(varchar(100), GETDATE(), 112) -- 年月日(無分隔符) Select CONVERT(varchar(100), GETDATE(), 111) -- 年月日(分隔符/) Select CONVERT(varchar(100), GETDATE(), 102) -- 年月日(分隔符.) Select CONVERT(varchar(100), GETDATE(), 23) -- 年月日(分隔符-) Select CONVERT(varchar(100), GETDATE(), 8) -- 時(shí)分秒
日期計(jì)算
在表的實(shí)際計(jì)算中,常需要計(jì)算距離某個(gè)日期或現(xiàn)在日期往前或往后某段時(shí)間的日期。
-- 加(Mysql) select date_add(now(),interval 1 day); -- year:年,quarter:季,month:月,week:周,day:天,hour:小時(shí),minuter:分鐘,second:秒,microsecond:毫秒 -- 加(sql server) select dateadd(day,n,'2023-06-20') -- 加(Hive) select date_add(current_timestamp(),1) -- 加一天 select date_format(date_sub(current_timestamp(),1),'yyyy-MM-dd') --指定前一天日期 select from_unixtime((unix_timestamp()-86400),'yyyy-MM') --指定前一天日期 -- 減 select date_sub(now(),interval 1 month); select date_sub(date_format(current_timestamp(),'yyyy-MM-dd'),1) select date_sub(current_timestamp(),14) -- Hive指定前一天日期 -- 計(jì)算日期間隔 select datediff('2023-6-16','2023-6-1') -- mysql計(jì)算兩個(gè)日期之間的間隔(相差天數(shù)) select datediff('d','2023-6-1','2023-6-16 12:20:00') --sql server計(jì)算兩個(gè)日期之間間隔天數(shù) select timediff('12:00:00', '11:30:00') -- 兩個(gè)時(shí)間間隔 select timestampdiff(month,date_sub(now(),interval 60 day),now()); -- 相差月 -- timestampdiff第一個(gè)參數(shù)定義返回計(jì)算的結(jié)果。year:年,quarter:季,month:月,week:周,day:天,hour:小時(shí),minuter:分鐘,second:秒,microsecond:毫秒 -- timestampdiff減去的日期帶有時(shí)間,會認(rèn)為是下一天(2023-07-20 08:00:00會按照2023-07-21計(jì)算);datediff會直接截取時(shí)間(2023-07-20 18:00:00也會按照2023-07-20計(jì)算) select timestampdiff(day,'2023-07-13',current_date()) -- timestampdiff可以實(shí)現(xiàn)各種字符串(例如2023-07-13,20230703)日期的加減 -- 當(dāng)月的第一天 select STR_TO_DATE(CONCAT(DATE_FORMAT(now(),'%Y-%m'), '-01'), '%Y-%m-%d') -- sql server返回當(dāng)月1號 select CONVERT(varchar(10),DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE()),0),120) -- 當(dāng)月最后一天 select DATE_ADD(STR_TO_DATE(CONCAT(DATE_FORMAT(DATE_ADD(now(),INTERVAL 1 MONTH),'%Y-%m'), '-01'), '%Y-%m-%d'),INTERVAL -1 DAY);
總結(jié)
到此這篇關(guān)于SQL中日期格式處理的文章就介紹到這了,更多相關(guān)SQL日期格式處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何使用navicat遠(yuǎn)程連接openGauss
公司要在openEuler系統(tǒng)中安裝openGauss數(shù)據(jù)庫,經(jīng)過幾天的查資料,終于是安裝成功了,并且能在navicat中遠(yuǎn)程連接使用,本文給大家介紹如何使用navicat遠(yuǎn)程連接openGauss,感興趣的朋友跟隨小編一起看看吧2023-10-10將sqlite3中數(shù)據(jù)導(dǎo)入到mysql中的實(shí)戰(zhàn)教程
最近因?yàn)楣ぷ鞯男枨?,需要將sqlite3中的數(shù)據(jù)導(dǎo)入到mysql中去,發(fā)現(xiàn)網(wǎng)上的一些教程都不夠詳細(xì),索性自己寫一篇,下面這篇文章主要給大家介紹了關(guān)于將sqlite3數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)入到mysql數(shù)據(jù)庫中的相關(guān)資料,需要的朋友可以參考下。2017-07-07Instagram提升PostgreSQL性能的五個(gè)技巧
這篇文章主要介紹了Instagram提升PostgreSQL性能的五個(gè)技巧,Instagram的數(shù)據(jù)庫一直由PostgreSQL支撐,經(jīng)驗(yàn)很具有參考性,需要的朋友可以參考下2015-04-04