Oracle日期型別操作幾個問題(二)
函式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;
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對數字和日期型別處理,也折射出日期型別資料和數字之間的間接關係。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17203031/viewspace-681548/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle日期型別操作幾個問題Oracle型別
- 日期型別轉換問題型別
- ORACLE日期型別Oracle型別
- 日期型別有問題,如何解決?型別
- Oracle基本資料型別儲存格式淺析(三)——日期型別(二)Oracle資料型別
- JS 裡的資料型別及幾個操作JS資料型別
- Struts2日期型別轉換問題???型別
- oracle對BLOB型別資料的操作與效能問題(轉載)Oracle型別
- 在 jdon 框架中使用日期型別時要注意的問題框架型別
- pg 中日期型的計算問題
- ORACLE 9I 中的日期格式型別Oracle型別
- Mysql資料庫學習(二):資料型別(數值型別 日期和時間型別 字串型別)MySql資料庫資料型別字串
- Oracle基本資料型別儲存格式淺析(三)——日期型別(一)Oracle資料型別
- Oracle基本資料型別儲存格式淺析(三)——日期型別(三)Oracle資料型別
- Oracle基本資料型別儲存格式淺析(三)——日期型別(四)Oracle資料型別
- Java基本型別佔用的位元組數(char佔用幾個位元組問題)Java型別
- 18、關於oracle 認證的幾個問題Oracle
- Oracle Shared Cursor問題的幾個實驗Oracle
- Oracle時間日期操作Oracle
- Java泛型型別擦除問題Java泛型型別
- JAVA型別的問題Java型別
- 最近的幾個技術問題總結和答疑(二)
- MongoDB日期型別查詢MongoDB型別
- [置頂] SQL日期型別SQL型別
- LINUX 下安裝ORACLE的幾個小問題LinuxOracle
- 日期型別與String型別的轉換型別
- 公司型別相關的幾個概念型別
- Oracle對日期時間操作Oracle
- cgo 型別轉換問題??Go型別
- 關於Ibatis 轉換 oracle date型別的問題BATOracle型別
- 【MySQL資料型別2之--日期時間型別】MySql資料型別
- iOS APNs的幾個問題iOS
- Java面試常問的幾個問題Java面試
- SAP UI5 日期型別 sap.ui.model.type.Date 的解析格式問題分析UI型別
- Java char 型別究竟佔幾個位元組?Java型別
- Java中關於String型別的10個問題Java型別
- 操作oracle出現的問題Oracle
- 33 個 JavaScript 核心概念系列(二): 值型別與引用型別JavaScript型別