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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle trunc年,Oracle的Trunc和round的区别

發(fā)布時(shí)間:2024/1/1 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle trunc年,Oracle的Trunc和round的区别 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一,對數(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。