【TRUNC】使用TRUNC函式完成對時間的擷取
使用TRUNC函式可以完成時間的擷取功能。
1.設定一下時間的顯示樣式
sec@secooler> alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
Session altered.
2.以系統時間為例,檢視當前時間
sys@secooler> select sysdate from dual;
SYSDATE
-------------------
2010-03-31 00:22:48
3.不使用參數列示擷取到日
sys@secooler> select trunc(sysdate) trunc_default from dual;
TRUNC_DEFAULT
-------------------
2010-03-31 00:00:00
4.擷取到年
以下八種方法都可以完成擷取到年的功能。
sys@secooler> select trunc(sysdate,'YEAR') trunc_year from dual;
TRUNC_YEAR
-------------------
2010-01-01 00:00:00
sys@secooler> select trunc(sysdate,'SYYYY') trunc_year from dual;
TRUNC_YEAR
-------------------
2010-01-01 00:00:00
sys@secooler> select trunc(sysdate,'YYYY') trunc_year from dual;
TRUNC_YEAR
-------------------
2010-01-01 00:00:00
sys@secooler> select trunc(sysdate,'SYEAR') trunc_year from dual;
TRUNC_YEAR
-------------------
2010-01-01 00:00:00
sys@secooler> select trunc(sysdate,'YYY') trunc_year from dual;
TRUNC_YEAR
-------------------
2010-01-01 00:00:00
sys@secooler> select trunc(sysdate,'YYY') trunc_year from dual;
TRUNC_YEAR
-------------------
2010-01-01 00:00:00
sys@secooler> select trunc(sysdate,'YY') trunc_year from dual;
TRUNC_YEAR
-------------------
2010-01-01 00:00:00
sys@secooler> select trunc(sysdate,'Y') trunc_year from dual;
TRUNC_YEAR
-------------------
2010-01-01 00:00:00
5.擷取到月
以下四種方法都可以完成擷取到月的功能。
sys@secooler> select trunc(sysdate,'MONTH') trunc_mounth from dual;
TRUNC_MOUNTH
-------------------
2010-03-01 00:00:00
sys@secooler> select trunc(sysdate,'MON') trunc_mounth from dual;
TRUNC_MOUNTH
-------------------
2010-03-01 00:00:00
sys@secooler> select trunc(sysdate,'MM') trunc_mounth from dual;
TRUNC_MOUNTH
-------------------
2010-03-01 00:00:00
sys@secooler> select trunc(sysdate,'RM') trunc_mounth from dual;
TRUNC_MOUNTH
-------------------
2010-03-01 00:00:00
6.擷取到日
以下三種方法都可以完成擷取到日的功能。
sys@secooler> select trunc(sysdate,'DDD') trunc_day from dual;
TRUNC_DAY
-------------------
2010-03-31 00:00:00
sys@secooler> select trunc(sysdate,'DD') trunc_day from dual;
TRUNC_DAY
-------------------
2010-03-31 00:00:00
sys@secooler> select trunc(sysdate,'J') trunc_day from dual;
TRUNC_DAY
-------------------
2010-03-31 00:00:00
7.擷取到小時
以下三種方法都可以完成擷取到小時的功能。
sys@secooler> select trunc(sysdate,'HH') trunc_hour from dual;
TRUNC_HOUR
-------------------
2010-03-31 00:00:00
sys@secooler> select trunc(sysdate,'HH12') trunc_hour from dual;
TRUNC_HOUR
-------------------
2010-03-31 00:00:00
sys@secooler> select trunc(sysdate,'HH24') trunc_hour from dual;
TRUNC_HOUR
-------------------
2010-03-31 00:00:00
8.擷取到分鐘
sys@secooler> select trunc(sysdate,'MI') trunc_minute from dual;
TRUNC_MINUTE
-------------------
2010-03-31 00:22:00
9.trunc應用--解決因時分秒不同導致無返回記錄的問題
sys@secooler> create table t (x date,y timestamp);
Table created.
sys@secooler> insert into t values (sysdate,sysdate);
1 row created.
sys@secooler> update t set y=sysdate;
1 row updated.
sys@secooler> commit;
Commit complete.
sys@secooler> select * from t;
X Y
------------------- ------------------------------------
2010-03-31 00:31:20 31-MAR-10 12.31.28.000000 AM
此時我們如果直接查詢x與y相等的記錄是沒有返回結果的。
sys@secooler> select * from t where x = y;
no rows selected
如果我們同時使用trunc擷取到天,結果將不同
sys@secooler> select * from t where trunc(x,'DD')=trunc(y,'DD');
X Y
------------------- ------------------------------------
2010-03-31 00:31:20 31-MAR-10 12.31.28.000000 AM
10.小結
在Oracle資料中日期的操作相對複雜,如果可以善加利用與日期相關的函式,便會達到事半功倍的效果。
Good luck.
secooler
10.03.30
-- The End --
1.設定一下時間的顯示樣式
sec@secooler> alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
Session altered.
2.以系統時間為例,檢視當前時間
sys@secooler> select sysdate from dual;
SYSDATE
-------------------
2010-03-31 00:22:48
3.不使用參數列示擷取到日
sys@secooler> select trunc(sysdate) trunc_default from dual;
TRUNC_DEFAULT
-------------------
2010-03-31 00:00:00
4.擷取到年
以下八種方法都可以完成擷取到年的功能。
sys@secooler> select trunc(sysdate,'YEAR') trunc_year from dual;
TRUNC_YEAR
-------------------
2010-01-01 00:00:00
sys@secooler> select trunc(sysdate,'SYYYY') trunc_year from dual;
TRUNC_YEAR
-------------------
2010-01-01 00:00:00
sys@secooler> select trunc(sysdate,'YYYY') trunc_year from dual;
TRUNC_YEAR
-------------------
2010-01-01 00:00:00
sys@secooler> select trunc(sysdate,'SYEAR') trunc_year from dual;
TRUNC_YEAR
-------------------
2010-01-01 00:00:00
sys@secooler> select trunc(sysdate,'YYY') trunc_year from dual;
TRUNC_YEAR
-------------------
2010-01-01 00:00:00
sys@secooler> select trunc(sysdate,'YYY') trunc_year from dual;
TRUNC_YEAR
-------------------
2010-01-01 00:00:00
sys@secooler> select trunc(sysdate,'YY') trunc_year from dual;
TRUNC_YEAR
-------------------
2010-01-01 00:00:00
sys@secooler> select trunc(sysdate,'Y') trunc_year from dual;
TRUNC_YEAR
-------------------
2010-01-01 00:00:00
5.擷取到月
以下四種方法都可以完成擷取到月的功能。
sys@secooler> select trunc(sysdate,'MONTH') trunc_mounth from dual;
TRUNC_MOUNTH
-------------------
2010-03-01 00:00:00
sys@secooler> select trunc(sysdate,'MON') trunc_mounth from dual;
TRUNC_MOUNTH
-------------------
2010-03-01 00:00:00
sys@secooler> select trunc(sysdate,'MM') trunc_mounth from dual;
TRUNC_MOUNTH
-------------------
2010-03-01 00:00:00
sys@secooler> select trunc(sysdate,'RM') trunc_mounth from dual;
TRUNC_MOUNTH
-------------------
2010-03-01 00:00:00
6.擷取到日
以下三種方法都可以完成擷取到日的功能。
sys@secooler> select trunc(sysdate,'DDD') trunc_day from dual;
TRUNC_DAY
-------------------
2010-03-31 00:00:00
sys@secooler> select trunc(sysdate,'DD') trunc_day from dual;
TRUNC_DAY
-------------------
2010-03-31 00:00:00
sys@secooler> select trunc(sysdate,'J') trunc_day from dual;
TRUNC_DAY
-------------------
2010-03-31 00:00:00
7.擷取到小時
以下三種方法都可以完成擷取到小時的功能。
sys@secooler> select trunc(sysdate,'HH') trunc_hour from dual;
TRUNC_HOUR
-------------------
2010-03-31 00:00:00
sys@secooler> select trunc(sysdate,'HH12') trunc_hour from dual;
TRUNC_HOUR
-------------------
2010-03-31 00:00:00
sys@secooler> select trunc(sysdate,'HH24') trunc_hour from dual;
TRUNC_HOUR
-------------------
2010-03-31 00:00:00
8.擷取到分鐘
sys@secooler> select trunc(sysdate,'MI') trunc_minute from dual;
TRUNC_MINUTE
-------------------
2010-03-31 00:22:00
9.trunc應用--解決因時分秒不同導致無返回記錄的問題
sys@secooler> create table t (x date,y timestamp);
Table created.
sys@secooler> insert into t values (sysdate,sysdate);
1 row created.
sys@secooler> update t set y=sysdate;
1 row updated.
sys@secooler> commit;
Commit complete.
sys@secooler> select * from t;
X Y
------------------- ------------------------------------
2010-03-31 00:31:20 31-MAR-10 12.31.28.000000 AM
此時我們如果直接查詢x與y相等的記錄是沒有返回結果的。
sys@secooler> select * from t where x = y;
no rows selected
如果我們同時使用trunc擷取到天,結果將不同
sys@secooler> select * from t where trunc(x,'DD')=trunc(y,'DD');
X Y
------------------- ------------------------------------
2010-03-31 00:31:20 31-MAR-10 12.31.28.000000 AM
10.小結
在Oracle資料中日期的操作相對複雜,如果可以善加利用與日期相關的函式,便會達到事半功倍的效果。
Good luck.
secooler
10.03.30
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-630855/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- trunc函式函式
- 利用TRUNC函式定製JOB的時間間隔函式
- Oracle Trunc函式Oracle函式
- trunc與round函式函式
- Oracle trunc()函式的用法Oracle函式
- round函式與trunc函式的使用方法函式
- 巧用trunc函式,獲取某日期範圍內的資料函式
- php字串擷取函式,支援中文擷取PHP字串函式
- Mysql字串擷取函式MySql字串函式
- 新版字元擷取函式字元函式
- 時間函式對比函式
- 按小時,分鐘,秒;統計之 round和trunc區別
- substr擷取函式 筆記函式筆記
- MySQL 字串函式:字串擷取MySql字串函式
- ROUND(x,y)與TRUNC(x,y)函式中y引數值為省略、空值與null的區別函式Null
- sql 獲取系統時間的函式。SQL函式
- 自己寫的擷取小數位的函式函式
- Oracle計算時間函式(對時間的加減numtodsinterval、numtoyminterval)Oracle函式
- python獲取系統時間(時間函式詳解)Python函式
- sql常用函式詳解(一)——字串擷取SQL函式字串
- MySQL 字串擷取相關函式總結MySql字串函式
- js字串擷取函式slice()、substring()、substr()JS字串函式
- 高效的中文字串擷取函式 (轉)字串函式
- 常用函式--時間函式函式
- 時間函式函式
- Javascript之字串擷取函式slice()、substring()、substr()JavaScript字串函式
- JS字串擷取函式slice(),substring(),substr()的區別JS字串函式
- PHP 時間函式PHP函式
- 日期時間函式函式
- oracle時間函式Oracle函式
- MySQL時間函式MySql函式
- Sql時間函式SQL函式
- SPL 的日期時間函式函式
- mysql中的時間函式MySql函式
- Golang時間函式及測試函式執行時間案例Golang函式
- T-SQL——函式——時間操作函式SQL函式
- java編寫的字串擷取函式—UTF-16定長特性Java字串函式
- javascript擷取指定指定區間的字串JavaScript字串