日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle中的Round和Trunc

發布時間:2023/12/10 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle中的Round和Trunc 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、Oracle中的Round和Trunc:

如同對數字進行四舍五入和按位截取一樣,Oracle對時間日期也提供了這兩種功能。但比起對數字進行四舍五入和截取比較復雜:這是因為時間日期是有格式的。下面看看這兩個函數的定義和用途:

ROUND(date [, format])

TRUNC(date [, format])

Round函數對日期進行“四舍五入”,Trunc函數對日期進行截取。如果我們不指定格式的話,Round會返回一個最接近date參數的日期,而Trunc函數只會簡單的截取時分秒部分,返回年月日部分。

二、Round和Trunc函數示例:

SQL > ? select ?to_char(sysdate,? ' yyyy-mm-dd?hh24:mi:ss ' )?now_date,
?? 2 ???????????? to_char( Round (sysdate), ' yyyy-mm-dd?hh24:mi:ss '
)?round_date,
?? 3 ???????????? to_char(Trunc(sysdate), ' yyyy-mm-dd?hh24:mi:ss '
)?trunc_date
?? 4 ???? from
?dual;

NOW_DATE???????????????????????????????ROUND_DATE?????????????????????????????TRUNC_DATE
-- ------------------------------------?--------------------------------------?----------------------

2008 - 06 - 30 ? 14 : 52 : 13 ???????????????????? 2008 - 07 - 01 ? 00 : 00 : 00 ???????????????????? 2008 - 06 - 30 ? 00 : 00 : 00


這是一個典型的例子,由于我們沒有指定round和trunc函數的格式,所以Oracle默認采用了按日期時間的格式,該例子中當前的時間是下午 14:52分,已經超過了12:00 AM這個中界線,所以Round返回07-01日而非06-30日。而Trunc不管三七二十一直接截取前面日期部分返回。

另外一個值得注意的地方是這兩個函數返回的時分秒都是00:00:00,即一天的開始時間(對于12小時制的返回的是12:00:00 AM)。

三、指定格式的Round和Trunc函數示例:

如果我們對Round函數和Trunc函數指定了格式,事情就變得有點復雜了,不過核心思想還是不變:Round是四舍五入,Trunc是截取。舉個例子來說,假如我們以年為格式,則現在Oracle的判斷是基于年來判斷,超過一年的一半(即6月30日),Round函數則返回下一年了,Trunc函數依然返回當前年。

SQL > ? select ?sysdate?"Now?date",
?? 2 ???????????? Round (sysdate,? ' yyyy '
)?Round_year,
?? 3 ???????????? Trunc(sysdate,? ' yyyy '
)?Trunc_year
?? 4 ???? from
?dual;

Now?date???ROUND_YEAR?TRUNC_YEAR
-- --------?----------?----------

30 - 6月? - 08 ? 01 - 1月? - 08 ? 01 - 1月? - 08


關于這兩個函數可用的格式非常多,但日常應用中用得比較多的基本上就這幾個,以Round函數為例:

select ? Round (sysdate,? ' Q ' )?Rnd_Q,
???????? Round (sysdate,? ' Month '
)?Rnd_Month,
???????? Round (sysdate,? ' WW '
)?Rnd_Week,
???????? Round (sysdate,? ' W '
)?Rnd_Week_again,
???????? Round (sysdate,? ' DDD '
)?Rnd_day,
???????? Round (sysdate,? ' DD '
)?Rnd_day_again,
???????? Round (sysdate,? ' DAY '
)?Rnd_day_of_week,
???????? Round (sysdate,? ' D '
)?Rnd_day_of_week_again,
???????? Round (sysdate,? ' HH12 '
)?Rnd_hour_12,
???????? Round (sysdate,? ' HH24 '
)?Rnd_hour_24,
???????? Round (sysdate,? ' MI '
)?Rnd_minute
?? from ?dual

?

?

四、用trunc函數處理日期

?日期用例 '2008-11-28 12:59:59'周五??

1.沒有fmt部分時

???語句:?SELECT?? TRUNC(TO_DATE('2008-11-28 12:00:01','YYYY-MM-DD hh24:mi:ss')) FROM?? DUAL;
??????????結果: 2008-11-28??

????????

2.得到最當前日期之前的最近的一個周日的日期

???語句: SELECT?? TRUNC(TO_DATE('2008-11-28 12:59:59','YYYY-MM-DD hh24:mi:ss'),'D') FROM?? DUAL;???
???結果: 2008-11-23 周日

???語句: SELECT?? TRUNC(TO_DATE('2008-11-28 12:59:59','YYYY-MM-DD hh24:mi:ss'),'D')+1 FROM?? DUAL;???
???結果: 2008-11-24 周一

?

3.得到最當前日期的所在月份的第一天

???語句: SELECT?? TRUNC(TO_DATE('2008-11-28 12:59:59','YYYY-MM-DD hh24:mi:ss'),'MM') FROM?? DUAL;???
???結果: 2008-11-1

???語句: SELECT?? TRUNC(TO_DATE('2008-11-28 12:59:59','YYYY-MM-DD hh24:mi:ss'),'MM')-1 FROM?? DUAL;?

???結果: 2008-10-31

?

4.得到最當前日期的所在年份的第一天

???語句: SELECT?? TRUNC(TO_DATE('2008-11-28 12:59:59','YYYY-MM-DD hh24:mi:ss'),'Y') FROM?? DUAL;???
???結果: 2008-1-1

???語句: SELECT?? TRUNC(TO_DATE('2008-11-28 12:59:59','YYYY-MM-DD hh24:mi:ss'),'Y')-1 FROM?? DUAL;?

???結果: 2007-12-31

轉載于:https://www.cnblogs.com/xhk1228/archive/2013/04/11/3194877.html

總結

以上是生活随笔為你收集整理的Oracle中的Round和Trunc的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。