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;