1. 程式人生 > >Oracle常見函式

Oracle常見函式

3.1日期型別  date內部7個位元組   分別表示 世紀 年 月 日 時 分 秒

timestamp  時間戳 最大精度達到11個位元組,前7位於date相同,8-11表示納秒,4個位元組儲存

日期關鍵字:sysdate 用於獲取系統時間,精確到時分秒,但是隻顯示年月日

可以將sysdate作為某一列的預設值也可以作為新值插入到表中

SYSTIMESTAMP也是Oracle的內部日期函式,返回當前系統日期和時間,精確到毫秒。

3.2日期轉換函式

 日期轉換函式

 字串轉為日期

查詢2002以前入職的員工

TO_DATE()將給定的字串以指定的格式進行轉換

SELECT ENAME,HIREDATE FROM EMP WHERE HIREDATE<TO_DATE('2002-01-02','YYYY-MM-DD');

    日期轉換為字串

     to_char()是將日期按照指定的格式轉換成字串

將此時的系統時間轉換為  Xxxx年xx月xx日 xx時xx分xx秒

SELECT TO_CHAR(SYSTIMESTAMP,'YYYY"年"mm"月"dd"日"hh24"點"mi"分"ss"秒"day')FROM DUAL;

3.3 日期常用函式

last_day();

返回當月的最後一天

SELECT LAST_DAY(SYSDATE) FROM DUAL;

指定返回15年2月份的最後一天是多少

SELECT LAST_DAY('01-2月-15')FROM DUAL;

add_monthS(DATE ,I)

I可以正數也可以是負數也可以是小數,小數位自動捨棄,正數往後,負數往前

查詢員工入職後的20週年紀念日。

SELECT ENAME,ADD_MONTHS(HIREDATE,20*12)AS A FROM EMP;

計算3個月後的今天是哪一天,星期幾?

SELECT TO_CHAR((ADD_MONTHS(SYSDATE,-10*12)),'YYYY-MM-DD DAY')FROM DUAL;

months_between()

返回兩個日期之間間隔的月數,如果間隔的月之間不為整數就返回小數,第二個引數比第一個引數時間晚的話會返回一個負數     

select ename, months_between(hiredate,sysdate)hiredate from emp;

NEXT_DAY()

查詢下個禮拜幾是哪一天, 中間引數在中文環境可以寫中文,英文環境下要寫英文的星期幾,

嫌麻煩的可以採用數字來1-7代替,注意1表示的星期天,7表示的星期六

下個禮拜三是哪一天

SELECT TO_CHAR((NEXT_DAY(SYSDATE,'星期三')),'YYYY-MM-DD DAY')AS NEXTWEEK FROM DUAL;

下個禮拜四是哪一天

SELECT TO_CHAR((NEXT_DAY(SYSDATE,5)),'YYYY-MM-DD DAY')AS NEXTWEEK FROM DUAL;--注意本週星期四還未過,所以顯示本週的週四

比較函式

引數型別必須匹配,如果後面引數型別,不同於前面的引數的資料型別,會做自動轉換,能轉換就比較,不能轉換就報錯。但自動轉換要注意符合前面引數的格式

比較後,哪個小返回哪個。

SELECT LEAST(SYSDATE,'09-9月-16')FROM DUAL;

EXTRACT():抽取或提取

從當前的系統時間中提取今年的數字

SELECT EXTRACT(YEAR FROM SYSDATE)AS YEAR FROM DUAL;

從指定的時間中獲取hour

SELECT EXTRACT(HOUR FROM TIMESTAMP'2016-10-10 15:35:23)FROM DUAL;