日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Oracle中的Round和Trunc:

系統 2063 0

一、 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

Oracle中的Round和Trunc:


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 东港市| 安乡县| 新宁县| 龙岩市| 富宁县| 乾安县| 黄平县| 绥阳县| 山丹县| 天津市| 慈利县| 杭锦后旗| 灌阳县| 舞钢市| 宜良县| 汾西县| 宁安市| 门源| 夏津县| 和政县| 宁南县| 宜黄县| 商洛市| 吴江市| 夏邑县| 虞城县| 柘荣县| 桦甸市| 广南县| 两当县| 沁源县| 肇州县| 金坛市| 桐庐县| 苗栗县| 潼关县| 株洲县| 虞城县| 遵化市| 三门峡市| 扎鲁特旗|