使用Oracle trunc 來指定精確的年月日時分秒____Oracle

來源:互聯網
上載者:User

本文轉載自:http://www.blogjava.net/gf7/archive/2012/07/01/381933.html


函數trunc是一個Oracle內建的函數,可以對date類型資料進行“度身裁剪”,來適應不同類型的資料需求。

 

在前篇《Oracle日期類型操作幾個問題》中,我們已經瞭解到date類型的基本知識。date類型是一種包括年、月、日、時、分和秒的資料類型,可以表示相對精確的時間資訊。內部儲存上,date類型是類似於數字類型的,可以通過加減操作實現對日期的推進和後退。

 

但是,日期格式的精確常常給我們帶來一些困擾,特別是其中的時分秒資訊。很多時候,我們對這部分資訊是不需要的。比如指定日期查詢、只顯示天資訊等等。藉助To_char雖然可以實現一部分這種需要,但是這樣做格式上比較複雜,而且進行了資料類型的轉換。是否存在不變化資料類型的方法,對日期型資料進行處理。答案就是trunc函數。

 

trunc(date)

 

截斷函數trunc的作用就是將日期類型資料按照指定格式截斷,返回一個日期變數資料。例如:

 

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

 

TO_CHAR(SYSDATE,'YYYY-MM-DDHH2

------------------------------

2010-12-10 20:39:58

 

SQL> select trunc(sysdate) from dual;

 

TRUNC(SYSDATE)

--------------

2010-12-10

 

SQL> select to_char(trunc(sysdate),'yyyy-mm-dd hh24:mi:ss') from dual;

 

TO_CHAR(TRUNC(SYSDATE),'YYYY-M

------------------------------

2010-12-10 00:00:00

 

預設情況下,sysdate函數返回的日期類型資料包括當前的具體時間。通過trunc(date)的處理,直接截取到天資訊,返回指定天的零時。

 

trunc函數還支援一個重載參數,格式字串:trunc(date,‘format’),用於指定截斷的位置。如下:

 

//截斷到年

SQL> select trunc(sysdate,'yyyy') from dual;

 

TRUNC(SYSDATE,'YYYY')

---------------------

2010-1-1

//截斷到月

SQL> select trunc(sysdate,'mm') from dual;

 

TRUNC(SYSDATE,'MM')

-------------------

2010-12-1

//截斷到日

SQL> select trunc(sysdate,'dd') from dual;

 

TRUNC(SYSDATE,'DD')

-------------------

2010-12-10

//截斷到小時

SQL> select trunc(sysdate,'hh24') from dual;

 

TRUNC(SYSDATE,'HH24')

---------------------

2010-12-10 20:00:00

//截斷到分鐘

SQL> select trunc(sysdate,'mi') from dual;

 

TRUNC(SYSDATE,'MI')

-------------------

2010-12-10 20:52:00

 

使用不同的格式標誌,可以指示不同的截斷位置,擷取各種零刻時間。

 

 

格式字串

說明

yyyy或者year

年度第一天(一月一日零時)

mm或者month

月份第一天(一日零時)

dd或者day

日期零時(00:00:00)

小時

hh或者hh24

幾時整(XX:00:00)

mi

幾分整(XX:XX:00)

 

藉助trunc函數和日期類型加減處理,我們可以實現一些特殊日期的設定,實現日期功能,使用在例如Job調度方面。

 

//明天零點

SQL> select to_char(trunc(sysdate)+1,'yyyy-mm-dd hh24:mi:ss') from dual;

 

TO_CHAR(TRUNC(SYSDATE)+1,'YYYY

------------------------------

2010-12-11 00:00:00

 

//當天早上十點

SQL> select to_char(trunc(sysdate)+10/24,'yyyy-mm-dd hh24:mi:ss') from dual;

 

TO_CHAR(TRUNC(SYSDATE)+10/24,'

------------------------------

2010-12-10 10:00:00

 

//當月三號,上午10點半

SQL> select to_char(trunc(sysdate,'mm')+2+10/24+1/48, 'yyyy-mm-dd hh24:mi:ss') from dual;

註:trunc(sysdate,'mm')將時間取到當前月的1號零時零分零秒,那麼加上2就表示當前月的3好零時零分零秒,再加上'10/24'('10/24'本身表示10個小時)就是表示當月3號的十點零分零秒,再加上'1/48'('1/48'本身表示30分鐘)就表示當月3號十點三十分零秒

 

TO_CHAR(TRUNC(SYSDATE,'MM')+2+

------------------------------

2010-12-03 10:30:00 

 

較複雜的to_char,trunc更加可以發揮日期類型數值本身的特色和優勢,無論是代碼整潔度還是處理效率都是值得關注的。

 

額外多說一句,trunc本身還具有處理數字截斷功能,用於截斷指定位元的數字類型。

 

//預設截斷到整數,不進行四捨五入;

SQL> select trunc(15.743) from dual;

 

TRUNC(15.743)

-------------

          15

//截斷到小數點後一位;

SQL> select trunc(15.793,1) from dual;

 

TRUNC(15.793,1)

---------------

          15.7

//截斷到小數點前一位;

SQL> select trunc(15.793,-1) from dual;

 

TRUNC(15.793,-1)

----------------

             10

 

trunc對數字和日期類型處理,也折射出日期類型資料和數字之間的間接關係。

 

原文地址:http://space.itpub.net/17203031/viewspace-681548

 

 trunc不僅可以用來處理日期,還可以用來處理數字

TRUNC(i1,i2)截取i1的i2位而不四捨五入,如果i2是正就截取小數點右邊第幾位,如果是i2是負就是截取小數點左邊第幾位。

例如:

 

 select TRUNC(0.10005767,1) from dual;    TRUNC(0.10005767,1) 1 0.1 

而如果trunc函數沒有指定參i2,那麼其作用為取整,且取整的時候不會四捨五入

例如:

 select TRUNC(2.60005767) from dual;    TRUNC(2.60005767) 

round函數和trunc函數的區別:

ROUND(i1,i2)四捨五入,i1四捨五入,如果i2是正保留小數點後i2位。如果是i2是負數,表示保留小數點前面(左邊第幾位)

TRUNC(i1,i2)截取i1的i2位而不四捨五入,如果i2是正就截取小數點右邊第幾位,如果是i2是負就是截取小數點左邊第幾位。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.