oracle trunc年,Oracle的Trunc和round的区别
一,對數(shù)字的操作
sql>select trunc(5.75),
trunc(5.75,1), trunc(5.75,-1) from dual
trunc(x [,y]),其中如果沒有指定y,則對x在0位小數(shù)進(jìn)行截?cái)?/p>
Eg:TRUNC(5.75)=5,如果y是負(fù)數(shù),則對x在小數(shù)點(diǎn)左邊的第|y|位處進(jìn)行截?cái)?/p>
TRUNC(5.75, -1)=0,這里應(yīng)對小數(shù)點(diǎn)左邊的第|-1|位截取,為什么是0,不是5?
另外ROUND函數(shù)是對數(shù)值進(jìn)行取整.
Eg:Round(5.75)=6,表示對5.75在0位小數(shù)處進(jìn)行取整四舍五入了?
Round(5.75, 1)=5.8,這里第1位小數(shù)是5?取整進(jìn)行了四舍五入?
ROUND(5.75, -1)=10,對5.75在左邊第|-1|位取整,左邊第一位就是十位?5是個(gè)位,是第0位?
解答如下:
第一個(gè)問題 如果y是負(fù)數(shù),則對x在小數(shù)點(diǎn)左邊的第|y|位處進(jìn)行截?cái)?#xff0c;例如:TRUNC(5.75,
-1)=0?5.75 看成 0005.75.000 從小數(shù)點(diǎn)左邊第一位往左邊截,不是0嗎
第二個(gè)問題,例如:ROUND(5.75)=6,表示對5.75在0位小數(shù)處進(jìn)行取整,這里0位小數(shù)是7??0位小數(shù)是沒有,不是7, 7是第一位小數(shù)了。5.75取整 就是6啊,是四舍五入了啊,要不 round和trunc就沒區(qū)別了嘛。
ROUND(5.75,
1)=5.8,這里第1位小數(shù)是5??不是,第一位小數(shù)是7?四舍五入就是 5.8
ROUND(5.75,
-1)=10,對5.75在左邊第|-1|位取整,左邊第一位就是十位?小數(shù)點(diǎn)左邊第一位是個(gè)位,你同樣看成
00005.75000,從個(gè)位的左邊開始取,并四舍五入。 個(gè)位是5 左邊的十位是0,由于5是進(jìn)1的,所以是10.
記起來有點(diǎn)困難喲!
二、對日期
一、Oracle中的Round和Trunc:
如同對數(shù)字進(jìn)行四舍五入和按位截取一樣,Oracle對時(shí)間日期也提供了這兩種功能。但比起對數(shù)字進(jìn)行四舍五入和截取比較復(fù)雜:這是因?yàn)闀r(shí)間日期是有格式的。下面看看這兩個(gè)函數(shù)的定義和用途:
ROUND(date [,
format])
TRUNC(date [, format])
Round函數(shù)對日期進(jìn)行“四舍五入”,Trunc函數(shù)對日期進(jìn)行截取。如果我們不指定格式的話,Round會返回一個(gè)最接近date參數(shù)的日期,而Trunc函數(shù)只會簡單的截取時(shí)分秒部分,返回年月日部分。
二、Round和Trunc函數(shù)示例:
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
這是一個(gè)典型的例子,由于我們沒有指定round和trunc函數(shù)的格式,所以O(shè)racle默認(rèn)采用了按日期時(shí)間的格式,該例子中當(dāng)前的時(shí)間是下午
14:52分,已經(jīng)超過了12:00 AM這個(gè)中界線,所以Round返回07-01日而非06-30日。而Trunc不管三七二十一直接截取前面日期部分返回。
另外一個(gè)值得注意的地方是這兩個(gè)函數(shù)返回的時(shí)分秒都是00:00:00,即一天的開始時(shí)間(對于12小時(shí)制的返回的是12:00:00
AM)。三、指定格式的Round和Trunc函數(shù)示例:
如果我們對Round函數(shù)和Trunc函數(shù)指定了格式,事情就變得有點(diǎn)復(fù)雜了,不過核心思想還是不變:Round是四舍五入,Trunc是截取。舉個(gè)例子來說,假如我們以年為格式,則現(xiàn)在Oracle的判斷是基于年來判斷,超過一年的一半(即6月30日),Round函數(shù)則返回下一年了,Trunc函數(shù)依然返回當(dāng)前年。
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
關(guān)于這兩個(gè)函數(shù)可用的格式非常多,但日常應(yīng)用中用得比較多的基本上就這幾個(gè),以Round函數(shù)為例:
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函數(shù)處理日期
日期用例
'2008-11-28
12:59:59'周五
1.沒有fmt部分時(shí)
語句:SELECT?TRUNC(TO_DATE('2008-11-28 12:00:01','YYYY-MM-DD hh24:mi:ss'))
FROM?DUAL;
結(jié)果:
2008-11-28
2.得到最當(dāng)前日期之前的最近的一個(gè)周日的日期
語句:
SELECT?TRUNC(TO_DATE('2008-11-28 12:59:59','YYYY-MM-DD
hh24:mi:ss'),'D')
FROM?DUAL;?結(jié)果:
2008-11-23
周日
語句:
SELECT
TRUNC(TO_DATE('2008-11-28 12:59:59','YYYY-MM-DD
hh24:mi:ss'),'D')+1
FROM?DUAL;?結(jié)果:
2008-11-24
周一
3.得到最當(dāng)前日期的所在月份的第一天
語句:
SELECT?TRUNC(TO_DATE('2008-11-28 12:59:59','YYYY-MM-DD
hh24:mi:ss'),'MM')
FROM?DUAL;?結(jié)果:
2008-11-1
語句:
SELECT?TRUNC(TO_DATE('2008-11-28 12:59:59','YYYY-MM-DD
hh24:mi:ss'),'MM')-1
FROM?DUAL;
結(jié)果:
2008-10-31
4.得到最當(dāng)前日期的所在年份的第一天
語句:
SELECT?TRUNC(TO_DATE('2008-11-28 12:59:59','YYYY-MM-DD
hh24:mi:ss'),'Y')
FROM?DUAL;?結(jié)果:
2008-1-1
語句:
SELECT?TRUNC(TO_DATE('2008-11-28 12:59:59','YYYY-MM-DD
hh24:mi:ss'),'Y')-1
FROM?DUAL;
結(jié)果:
2007-12-31
總結(jié)
以上是生活随笔為你收集整理的oracle trunc年,Oracle的Trunc和round的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: u盘或者移动硬盘插电脑上打不开,再点一下
- 下一篇: csdn无法离线浏览的最简解决方案