日期時間函數
Oracle 中的日期型數據實際含有兩個值: 日期和時間。默認的日期格式是 DD-MON-RR.日期時間函數用來返回當前系統的日期和時間、以及對日期和時間類型的數據進行處理運算。
add_months(date,count);在指定的日期上增加count個月
last_day(date);返回日期date所在月的最後一天
months_between(date1,dates);返回date1到date2之間間隔多少個月
new_time(date,this’,’other’);將時間date從this時區轉換成other時區
next_day(day,’day’);返回指定日期或最後一的第一個星期幾的日期,這裏day爲星期幾
sysdate();獲取系統的當前日期
current_timestamp();獲取當前的時間和日期值
round:日期的四捨五入
trunc 日期的截取
日期的數學運算:
l 在日期上加上或減去一個數字結果仍爲日期。
l 兩個日期相減返回日期之間相差的天數。
l 可以用數字除24來向日期中加上或減去小時。
//獲取系統的當前時間 顯示的格式採用默認格式 顯示結果:07-4月 -11 11.15.38.390000 上午 +08:00
SQL> select current_timestamp from dual;
//獲取系統的當前日期值 顯示結果:2011-4-7 11
SQL> select sysdate from dual;
//爲當前日期加上3個月 顯示的結果:2011-7-7 11:18:36
select add_months(sysdate,3) from dual;
//返回當前月的最後一天 顯示的結果:2011-4-30 11:19:4
select last_day(sysdate) from dual;
//返回兩個日期之間的間隔月是幾: 結果爲:4
SQL> select months_between(add_months(sysdate,4),sysdate) from dual;
//從GMT時區轉換成AST時區的日期結果
SQL> select new_time(sysdate,'GMT','AST') from dual;
//返回下一個星期一的日期值 必須寫成星期’幾’
SQL> select next_day(sysdate,'星期一') from dual;
SQL> select sysdate,round(sysdate,'yyyy') from dual;
SYSDATE ROUND(SYSDATE,'YYYY')
----------- ---------------------
2011-4-9 22 2011-1-1
SQL> select sysdate,round(sysdate,'mm') from dual;
SYSDATE ROUND(SYSDATE,'MM')
----------- -------------------
2011-4-9 22 2011-4-1
SQL> select sysdate,round(sysdate,'dd') from dual;
SYSDATE ROUND(SYSDATE,'DD')
----------- -------------------
2011-4-9 22 2011-4-10
SQL> select sysdate,trunc(sysdate,'dd') from dual;
SYSDATE TRUNC(SYSDATE,'DD')
----------- -------------------
2011-4-9 22 2011-4-9
SQL> select sysdate,trunc(sysdate,'yyyy') from dual;
SYSDATE TRUNC(SYSDATE,'YYYY')
----------- ---------------------
2011-4-9 22 2011-1-1
SQL> select sysdate,trunc(to_char(sysdate,'yyyy')) from dual;
SYSDATE TRUNC(TO_CHAR(SYSDATE,'YYYY'))
----------- ------------------------------
2011-4-9 22 2011
SQL> select sysdate,trunc(to_char(sysdate,'dd')) from dual;
SYSDATE TRUNC(TO_CHAR(SYSDATE,'DD'))
----------- ----------------------------
2011-4-9 22 9
SQL> select sysdate,trunc(to_char(sysdate,'mm')) from dual;
SYSDATE TRUNC(TO_CHAR(SYSDATE,'MM'))
----------- ----------------------------
2011-4-9 22 4
轉換函數:
隱式轉換:在運算過程中由系統自動完成的
顯式轉換:在運算過程中需要調用相應的轉換函數實現。
隱式轉換
數據類型 |
目標數據類型 |
VARCHAR2 or CHAR |
NUMBER |
VARCHAR2 or CHAR |
DATE |
NUMBER |
VARCHAR2 |
DATE |
VARCHAR2 |
顯式轉換
to_char(date,’format’):按照指定的格式format把數字或日期類型的數據轉換成字符串
格式:
必須包含在單引號中而且大小寫敏感。
可以包含任意的有效的日期格式。
日期之間用逗號隔開。
日期格式如下:
YYYY |
2004 |
YEAR |
TWO THOUSAND AND FOUR |
MM |
02 |
MONTH |
JULY |
MON |
JUL |
DY |
MON |
DAY |
MONDAY |
DD |
02 |
//把當前日期轉換成YYYY/MM/DD的格式
SQL> select to_char(current_timestamp,'YYYY/MM/DD') from dual;
//把當前日期轉換成YYYY/MM/DD HH24/MI/SS AM的格式
SQL> select to_char(current_timestamp,'YYYY/MM/DD HH24/MI/SS AM') from dual;
//DD “of” MONTH
SQL> select to_char(current_timestamp,'YYYY DD "of" MONTH HH/MI/SS AM') from dual;
//把當數字按照$99,999這種方式返回字符串 並且操作數的位數不能夠大於5(即$後邊的位數)位,否則話結果會是########
SQL> select to_char(11111,'$99,999') from dual;
to_number(char);把包含了數字格式的字符串轉換成數字數據
to_date(string,’format’);按照指定格式的format把字符串轉換成日期數據,如果省略了foramt格式,那麼就採用默認的日期格式(DD-MON-YY);
//把當前字符串轉換成日期
SQL> select to_date('2011-02-08','YYYY-MM-DD') from dual;
//求出兩個日期之間相差的天數
SQL> select to_date('2011-07-15','YYYY-MM-DD')-to_date('2011-02-08','YYYY-MM-DD') from dual;
//求出兩個日期之間相差的周次
SQL> select (to_date('2011-07-15','YYYY-MM-DD')-to_date('2011-02-08','YYYY-MM-DD'))/7 from dual;
//對周次進行向上取整
SQL> select ceil((to_date('2011-07-15','YYYY-MM-DD')-to_date('2011-02-08','YYYY-MM-DD'))/7) from dual;
chartorowid(char);把字符串轉換成rowid類型
rowidtochar(x);把rowid類型轉換成字符類型數據