日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

12類Oracle日期函數超全面總結

瀏覽:27日期:2023-09-22 20:54:42
目錄前言1、sysdate、current_date及systimestamp2、兩個日期的差3、添加月份、減少月份4、greatest和least5、next_day6、last_day7、months_between8、組合日期函數9、round 和 trunc10、使用to_date 和 to_char設置日期時間格式11、new_time 切換時區12、EXTRACT總結前言

在使用Oracle數據庫過程中,對日期的使用不可避免,那Oracle中的日期函數有哪些呢?本篇就日期函數進行整理了,不一定全部了解記住,但是要做到心中有數,以后在寫腳本的時候就不會繞彎子了。

1、sysdate、current_date及systimestamp

sysdate

Oracle使用計算機操作系統的當前日期和時間,是通過sysdate函數實現的,在任何可以使用Oracle函數的地方都可以使用sysdate函數,可以將它視為每個表的一個隱藏列或者偽列。也就是說即使一張表沒有sysdate這個字段,也可以如下這樣查詢。

select sysdate from all_users;>> 2022-10-15 23:09:37

current_date

此字段返回的是當前會話的時區的系統日期,我們一般使用的是東八區的時間,如果將當前會話時間修改成東九區試試:

alter session set time_zone='+09:00'; select current_date, sysdate from dual;>> 2022-10-15 10:11:51 2022-10-15 09:11:51

通過例子就很明顯看出兩者區別了,一個依賴于時區,一個不依賴。

systimestamp

函數systimestamp,它返回的是本機的系統時間,精確到微秒,并包含了當前時區,它跟會話的時區無關。

select systimestamp from dual>> 2022-10-15 23:15:43.699000 +08:00 2、兩個日期的差

如何計算兩個日期的差呢,可以直接進行相減,返回的數值單位是天,也可以用一個日期加減某個數值代表N天后(前)。

比如十天后發工資,那么十天后是哪一天呢?

select sysdate+10 from dual >> 2022-10-25 23:18:16

再比如今年春節是2023-01-22,那么距離過年還有哪個多少天呢?

select to_date('2023-01-22','yyyy-MM-dd') - sysdate from dual >> 98.02703703703703703703703703703703703704

暈,還有3個月呢~

3、添加月份、減少月份

既然天數可以加減,那么月份是否也可以這樣操作了。其實就用到了這個函數:add_months,不管是向前或向后查,只不過是參數是正還是負而已。

例如:查詢一下三個月后、兩個月前分別是哪一天:

select add_months(sysdate,3), add_months(sysdate,-2) from dual >> 2023-01-15 23:23:40 2022-08-15 23:23:40

那么對于年份呢,只要在上面參數基礎上乘以12就可以推算了。

4、greatest和least

這兩個函數在數值函數中分別代表取一組數值中的最大值和最小值,在日期中也有相關應用。greatest是從一組日期數據中取距離當前最近的日期,least是在一組日期中選擇最早的日期。

select greatest(to_date('2013-11-11','yyyy-MM-dd'),to_date('2013-12-11','yyyy-MM-dd'),to_date('2014-01-05','yyyy-MM-dd'),to_date('2013-11-11','yyyy-MM-dd')) from dual>> 2014-01-05 00:00:00select least(to_date('2013-11-11','yyyy-MM-dd'),to_date('2013-12-11','yyyy-MM-dd'),to_date('2014-01-05','yyyy-MM-dd'),to_date('2013-11-11','yyyy-MM-dd')) from dual>> 2013-11-11 00:00:00

值得注意的是,這里必須用to_date對字符串進行轉化,否則會把他們無法判斷是否為日期格式,只能當成字符串去處理,容易出現結果錯誤的情況。

5、next_day

此函數表示從指定日期開始算,下周幾是幾號?此函數的第二個參數范圍是[1,7],超出范圍會報錯,注意的是:1代表周日,7代表周六。

select next_day(to_date('2022-10-15','yyyy-MM-dd'),2) from dual>> 2022-10-17 00:00:00

如上sql表示,假設今天是10月15日,下個周二是10月17日。如果參數超出范圍會報錯:

select next_day(to_date('2022-10-15','yyyy-MM-dd'),8) from dual > ORA-01846: 周中的日無效6、last_day

此函數用來計算某個月的最后一天是哪天,有了這個函數就不要每個月都判斷一下了。

select last_day(sysdate) from dual>> 2022-10-31 23:36:12select last_day(to_date('2022-11-15','yyyy-MM-dd')) from dual>> 2022-11-30 00:00:00 7、months_between

此函數用來計算兩個日期之間相差的月份數,返回結果可能帶小數。例如計算下自己的周歲,才發現還未成年呢~

select floor(months_between(sysdate ,to_date('2005-08-24','yyyy-MM-dd'))/12) from dual>> 178、組合日期函數

如上列舉的日期函數中,根據參數格式都可以組合使用。

舉例:小剛2022年10月28日入職新公司,兩個月試用期,新員工過了試用期后的每月第一天可以做轉正報告。那小剛什么時候可以做轉正報告?

select last_day(add_months(to_date('2022-10-28','yyyy-MM-dd'),2))+1 from dual>> 2023-01-01 00:00:00

思路:先用add_months計算倆月后是哪一天,再用last_day計算那個月的最后一天,再+1代表下個月的第一天。

9、round 和 trunc

在數值函數中,round和trunc函數是對小數的處理,那么在日期函數中,是否有相同或類似的應用呢?

我們用一個日期減去另一個日期的時候經常會帶有小數,這是因為Oracle中保留了時、分、秒。有的時候我們不需要時、分、秒,所以就需要用到round和trunc這兩個函數了。

round函數作用是:如果某天的時間在中午之前,那么使用round函數會將該天的時間設置為0點(就是午夜),如果為中午之后就設置為次日零點,這也就是時間方面的四舍五入了。

trunc的函數作用:舍去,無論某天處于什么時間,使用trunc函數后都會將改天時間置為當日0點。

select sysdate from dual>> 2022-10-15 23:46:48select to_date('2022-10-17','yyyy-MM-dd')-round(sysdate), to_date('2022-10-17','yyyy-MM-dd')-trunc(sysdate) from dual >> 1 2

如上,今天是10月15日 23點,因此round(sysdate)四舍五入為次日零點,即10月16日零點,因此距離17日相差1天。而trunc(sysdate)則是15日,因此相差2天。

10、使用to_date 和 to_char設置日期時間格式

基本使用

函數to_date 和 to_char作用是相反的,但是用法很類似。

to_date是將字符串轉換為時間格式,而to_char是將日期轉換為字符串格式。這兩個函數我們平時用的實在是太多了,舉例說明一下。

select to_date('2022/11/11 12:01:14','yyyy-MM-dd HH:MI:SS') from dual>> 2022-11-11 12:01:14select to_char(sysdate, 'yyyyMMdd HH:MI:SS') from dual>> 20221015 11:54:17

在函數to_char使用的時候可以在format參數中插入字符串,以雙引號的方式插入,至于雙引號在SQL中的用法,在我的另一篇文章也有介紹。

select to_char(sysdate , 'yyyy'年'MM'月'dd'日'') from dual;>> 2022年10月15日

最常見的to_char錯誤

在轉換的時候,月份和分鐘經常混淆。這里要注意下,MM代表的是月份,MI代表是分鐘,由于Oracle中支持的時間很靈活,所以這塊弄混了不會提示的。

select to_char(sysdate ,'yyyy-MI-dd hh:mm:ss') from dual>> 2022-57-15 11:10:36

如上,即使MI與MM互換了位置也不會報錯的。如果分鐘的數值是1-12內,那這個錯就很難發現了。

to_date整形參數

函數to_date的參數不僅可以接受字符串的參數,還可以接受數值類型的參數,這樣使Oracle處理時間更加的靈活。

select to_date(20221222,'yyyy-MM-dd') from dual >> 2022-12-22 00:00:0011、new_time 切換時區

先看下函數參數用法:new_time(date,‘this’,‘other’),函數共有3個參數:date代表的是this時區的時間,‘this’代表的是用三個字母組成的縮寫代替,代表當前時區,‘other’也是用三個字母組成的縮寫代替,表示其他時區。聽起來比較模糊,舉例理解一下。

查詢一下‘2022-10-01 12:00:00’這個時間在北京和夏威夷的時間分別是多少?

select to_date('2022-10-01 12:00:00','yyyy-MM-dd hh24:mi:ss'),new_time(to_date('2022-10-01 12:00:00','yyyy-MM-dd hh24:mi:ss'),'EST','HST') from dual>> 2022-10-01 12:00:00 2022-10-01 07:00:00

其中,EST和HST都是全球時區的縮寫,可以另行科普一下。

12、EXTRACT

函數EXTRACT可用來代替to_char函數來選擇日期值中的某一部分(如從一個日期中選擇月份和天)。

SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL; >> 2022 SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL; >> 10SELECT EXTRACT(DAY FROM SYSDATE) FROM DUAL; >> 16

注意:EXTRACT抽取年月日部分和抽取時分是不同的,抽取時分的時候需要這樣寫:

SELECT EXTRACT(hour FROM TIMESTAMP '2022-12-22 22:34:12') FROM DUAL>> 22SELECT EXTRACT(minute FROM TIMESTAMP '2022-12-22 22:34:12') FROM DUAL>> 34

其實,這個函數的功能幾乎可以用to_char取代,因為其功能完全可以替代,如下:

select to_char(sysdate ,'yyyy') from dual>> 2022select to_char(sysdate ,'HH') from dual>> 12

綜上,Oracle當中的時間函數使用非常靈活,可以變換各種格式進行查詢處理。

總結

到此這篇關于12類Oracle日期函數超全面總結的文章就介紹到這了,更多相關Oracle日期函數內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Oracle 數據庫
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
成人一区不卡| 日韩亚洲国产欧美| 亚洲日本免费电影| 婷婷综合电影| 国产日产高清欧美一区二区三区| 欧美一区=区三区| 欧美日韩亚洲一区在线观看| 欧美激情aⅴ一区二区三区| 成人黄色av| 国产高清不卡| 91久久在线| 欧美专区一区| 青青青免费在线视频| 久久婷婷av| 免费日韩av片| 国产精品日韩精品中文字幕| 国产福利91精品一区二区| 久久久久亚洲| 亚洲精品欧美| 欧美日韩调教| 欧美一区久久久| 中文一区二区| 久久精品999| 欧美xxxx中国| 亚洲一级高清| 日韩av网站在线免费观看| 国产成人77亚洲精品www| 亚洲午夜精品久久久久久app| 在线国产日韩| 色在线视频观看| 日韩精品中文字幕吗一区二区 | 欧美精品一区二区久久| 日本综合视频| 欧美日韩免费看片| 亚洲精品动态| 日本蜜桃在线观看视频| 在线观看亚洲精品福利片| 国产suv精品一区| 亚洲欧美视频| 国产传媒在线观看| 日韩精品成人在线观看| 日本久久精品| 亚州av一区| 91亚洲国产高清| 亚洲人亚洲人色久| 欧美成人a交片免费看| 日韩国产在线观看一区| 日韩专区精品| 国产精品一二| 亚洲影院天堂中文av色| 日本欧美不卡| 国产激情欧美| 视频在线观看一区| 波多视频一区| 久久av影院| 日韩欧美2区| 国产婷婷精品| 91精品综合| 伊人久久视频| 精品一区二区三区免费看| 丝袜a∨在线一区二区三区不卡| 在线天堂中文资源最新版| 国产精品亚洲欧美日韩一区在线| 亚洲综合不卡| 99精品电影| 日韩成人综合| 国产精品xxx| 日韩高清欧美激情| 国产一在线精品一区在线观看| 国产乱码精品一区二区亚洲| 久久久久国产精品一区二区| 国产精品成人3p一区二区三区| 亚洲人成高清| 国产精品女主播一区二区三区 | 国产精品xxx| 日韩精品一级中文字幕精品视频免费观看 | 欧洲av一区二区| 国产精品日韩精品在线播放| 亚洲日本久久| 亚洲欧美久久| 午夜在线视频观看日韩17c| 久久香蕉国产| 蜜臀国产一区| 国产欧美一区二区三区精品酒店| 青青国产精品| 日本一区二区三区中文字幕| 亚洲资源av| 在线国产一区| 欧美中文字幕一区二区| 成人精品亚洲| www.51av欧美视频| 丰满少妇一区| 美女久久精品| 91精品麻豆| 91精品国产自产观看在线| 亚州国产精品| 中文字幕成人| 一本一道久久a久久| 久久99伊人| 蜜桃视频在线观看一区二区| 蜜桃视频免费观看一区| 亚洲女同中文字幕| 狠狠色狠狠色综合日日tαg| 欧美国产91| 99国产精品久久久久久久| 1024精品久久久久久久久| 欧美日韩一二| 国产一区二区精品| 狠狠操综合网| 亚洲尤物在线| 日韩欧美中文在线观看| 青青青国产精品| 国产精品久久国产愉拍| 久久午夜影院| 日本少妇一区| 国产亚洲在线观看| 免费精品视频最新在线| 亚洲精品乱码| 欧美日一区二区在线观看| 国产精品超碰| 色一区二区三区| 久久av一区| 久久国产欧美日韩精品| 国产精品久久国产愉拍| 91欧美在线| 好吊一区二区三区| 日韩欧美中文在线观看| 国产精品久久久久久久久久久久久久久 | 精品在线99| 日韩极品在线观看| 麻豆91在线播放| 丰满少妇一区| 不卡中文字幕| 清纯唯美亚洲综合一区| 电影91久久久| 夜夜嗨一区二区三区| 日韩亚洲精品在线观看| 精品国产一区二区三区噜噜噜| 日韩av有码| 一区在线视频观看| 日韩精品成人在线观看| 麻豆国产91在线播放| 蜜桃精品在线| 蜜臀va亚洲va欧美va天堂| 久久99久久人婷婷精品综合| 亚洲91精品| 免费人成精品欧美精品| 国产亚洲久久| 三上悠亚国产精品一区二区三区| 99视频一区| 国产精品jk白丝蜜臀av小说| 亚洲国产综合在线看不卡| 国产一区 二区| 日韩精品网站| 日韩精品亚洲aⅴ在线影院| 国产欧洲在线| 婷婷成人av| 99精品电影| 国产精品久久乐| 亚洲一区欧美激情| 成人国产精品一区二区网站| 午夜欧美精品久久久久久久| 国产精品亚洲成在人线| 久久精品免费一区二区三区| 免费在线视频一区| 97在线精品| 欧美91福利在线观看| 欧美国产日韩电影| 亚洲欧美日韩专区| 伊人久久av| 欧美亚洲tv| 中文久久精品| 亚洲综合在线电影| 欧美极品中文字幕| 亚洲aⅴ网站| 国产精品av久久久久久麻豆网| 青青草国产精品亚洲专区无| 激情综合在线| 四虎8848精品成人免费网站| 久久精品97| 亚洲精品国产日韩| 欧美成人精品| 91一区二区三区四区| 国产日韩欧美中文在线| 视频一区欧美精品| 久久久久蜜桃| 97人人精品| 精品一区二区三区视频在线播放 | 亚洲欧美日韩在线观看a三区| 日韩av在线中文字幕| 日日摸夜夜添夜夜添国产精品| 欧美日韩一二三四| 成人一二三区| 久久一区精品| 国产精品亲子伦av一区二区三区| 亚洲3区在线| 亚洲最大av| 蜜桃av一区二区在线观看| 香蕉人人精品| 久久精品123|