SQL中日期格式處理方法大全
背景:
實際工作,使用SQL語句對數(shù)據(jù)進行處理,有一大部分工作是對日期時間型數(shù)據(jù)進行處理,通過對字段的拼接或轉(zhuǎn)換生成實際需要的格式的日期字段。本文章盡可能全面記錄現(xiàn)在主流的數(shù)據(jù)庫(MySQL和Hive)對日期格式的處理,形成一份工作速查文檔,提升工作效率。
一、獲取當(dāng)前日期
MySQL
select now(); --日期時間格式 select current_date(); -- 日期格式 select current_time(); -- 時間格式 select sysdate(); -- 日期時間格式 select current_timestamp(); -- 日期時間戳
Hive
select current_date() -- 日期格式 select current_timestamp() -- 日期時間格式
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 時間戳,使用時間格式轉(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)時間戳 select unix_timestamp() -- 返回當(dāng)前時間對應(yīng)的時間戳,時間戳數(shù)值可以加減,如一小時3600秒,一天86400秒
sql server
select convert(datetime,'YYYY-MM-DD HH24:MI:SS') -- cast強制轉(zhuǎn)換 select cast('YYYY-MM-DD HH24:MI:SS' as datetime)
三、日期轉(zhuǎn)換為字符串
SQL表中存儲日期對數(shù)據(jù)類型有要求,特別是 hive存儲日期時間的時候通常用string,所以有時也要實現(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強制轉(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) -- 年月日 時分秒 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) -- 時分秒
日期計算
在表的實際計算中,常需要計算距離某個日期或現(xiàn)在日期往前或往后某段時間的日期。
-- 加(Mysql) select date_add(now(),interval 1 day); -- year:年,quarter:季,month:月,week:周,day:天,hour:小時,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指定前一天日期 -- 計算日期間隔 select datediff('2023-6-16','2023-6-1') -- mysql計算兩個日期之間的間隔(相差天數(shù)) select datediff('d','2023-6-1','2023-6-16 12:20:00') --sql server計算兩個日期之間間隔天數(shù) select timediff('12:00:00', '11:30:00') -- 兩個時間間隔 select timestampdiff(month,date_sub(now(),interval 60 day),now()); -- 相差月 -- timestampdiff第一個參數(shù)定義返回計算的結(jié)果。year:年,quarter:季,month:月,week:周,day:天,hour:小時,minuter:分鐘,second:秒,microsecond:毫秒 -- timestampdiff減去的日期帶有時間,會認(rèn)為是下一天(2023-07-20 08:00:00會按照2023-07-21計算);datediff會直接截取時間(2023-07-20 18:00:00也會按照2023-07-20計算) select timestampdiff(day,'2023-07-13',current_date()) -- timestampdiff可以實現(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)文章
將sqlite3中數(shù)據(jù)導(dǎo)入到mysql中的實戰(zhàn)教程
最近因為工作的需求,需要將sqlite3中的數(shù)據(jù)導(dǎo)入到mysql中去,發(fā)現(xiàn)網(wǎng)上的一些教程都不夠詳細,索性自己寫一篇,下面這篇文章主要給大家介紹了關(guān)于將sqlite3數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)入到mysql數(shù)據(jù)庫中的相關(guān)資料,需要的朋友可以參考下。2017-07-07