1. 程式人生 > >Oracle資料型別及函式

Oracle資料型別及函式

一、數字型別 :NUMBER            定義形式:NUMBER(P,S),P 代表數字的總位數(整數位 + 精度位),S 代表精度(可以不寫。不寫表示整數)           NUMBER(P)表示整數, P 表示數字的總位數,取值為 1-38           NUMBER(P,S) 表示浮點數, P包含了 S 。           例如: NUMBER(6,2), 那麼整數位最大位是 4 位,小數位最大位是 2位        數值函式
  • ROUND(n, m) --- 用於四捨五入
               (0) n可以是任何數                (1) m必須是整數                (2) m取正數則四捨五入到小數點後第 m 位                (3) m取 0 值則四捨五入到整數位                (4) m取負數,則四捨五入到小數點前 m 位                (5) m預設,預設值是 0           例如:SELECT ROUND('25.6612',2) FROM DUAL
  • TRUNC(n, m) --- 用於擷取小數點後的 m 位,但不進行四捨五入
          例如:SELECT TRUNC('25.6612',1) FROM DUAL
  • MOD(m, n) --- 取模函式,注意:在資料庫中 n 可以為零,返回原值
          例如:SELECT MOD(25,0) FROM DUAL
  • CEIL(N) --- 取大於或等於 n 的最小整數值
          例如:SELECT CEIL(4.2) FROM DUAL
  • FLOOR(N) --- 取小於或等於 n 的最大整數值
          例如:SELECT FLOOR(4.5) FROM DUAL 二、字串型別:
  • 預設單位是位元組,可指定為字元:
     a)    CHAR(10),等價於CHAR(10 byte)                b)    指定單位為字元 --- CHAR(10 CHAR), 20個位元組                c)    VARCHAR2(10),等價於VARCHAR2(10 BYTE)
  • CHAR :表示固定長度的字元型別
          定義形式:CHAR(N),N表示佔用的位元組數,最大長度 2000 位元組。           注意:-無論實際資料多長,都會將資料補充若干空格,達到該欄位實際指定的長度。                     - CHAR 可以不指定長度,預設長度為 1 。           優點:查詢效率好           缺點:浪費磁碟空間
  • VARCHAR2 : Oracle 特有型別,表示變長的字元型別
     定義形式:VARCHAR2(N),N 表示佔用的位元組數,最大長度 4000 位元組,資料多長就儲存多長,用多少佔多少。
     優點:磁碟空間利用好
     缺點:查詢效率低。
  • LONG : VARCHAR2加長版,儲存變長字串,最多達到 2GB 的字串資料,
          限制:每個表只能有一個 LONG 型別列;不能作為主鍵;不能建立索引;不能出現在查詢條件中。          
  • CLOB :儲存定長或變長字串,最多達到 4GB 的字串資料,建議使用 CLOB 代替LONG 。
       字串函式
  • CONCATE(char1,char), 返回兩個字串連線後的結果,一般使用“ || ”來代替
          例如:SELECT CONCAT(ename,':') || job FROM emp_rs
  • LENGTH(char), 用於返回這個字串的長度(字元量)
          例如: SELECT ename, LENGTH(ename) FROM emp_rs
  • UPPER(char) ,用於將字元轉換為大寫形式 
  • LOWER(char) ,用於將字元轉換為小寫形式
  • INITCAP(char) ,用於首字母大寫,其它字母小寫(其中可以使用空格分隔多個單詞,那麼每個單詞首字母都會大寫)
          例如:SELECT UPPER('helloworld'),LOWER('HELLOWORLD'),INITCAP('HELLO WORLD') FROM DUAL
  • TRIM(c2 from c1) --- 去除給定字串中兩邊重複的給定字元
          例如:SELECT TRIM('e' FROM 'eeeeeliteeeee') FROM DUAL           LTRIM(c1[,c2]) --- 可以單獨去除左面的字元           例如:SELECT LTRIM('eeeeeliteeeee','e') FROM DUAL           RTRIM(c1[,c2]) ---可以單獨去除右面的字元           例如:SELECT RTRIM('eeeeeliteeeee','e') FROM DUAL
  • LPAD(char1, n, char2) --- 補位函式,在左邊補充
          例如:SELECT LPAD(sal,10,' ') FROM emp_rs           RPAD(char1, n, char2) --- 補位函式,在右邊補充           例如:SELECT RPAD(sal,10,' ') FROM emp_rs 
  • SUBSTR(char, offset, n) --- 用於獲取字串的子串,返回 char 中從m 位開始取 n 個字元。Offset 為負數時,就是從字串最後一位開始, n 不能為負數。若擷取的字元數量超過實際可以擷取的字元數量時,則擷取到字串末尾。資料庫中下標都是從 1 開始的
          例如:SELECT SUBSTR('Thinking in java', 10, 2) FROM DUAL
  • INSTR(char1, char2[,n,m]) --- 返回子串 char2 在源字串char1 中的位置,
              n : 從char1 的第幾個字元開始查詢(不寫則為 1 )               m : 查詢第幾次出現(不寫則為 1 )           例如:SELECT INSTR('Thinking in java', 'in', 4, 2) FROM DUAL 三、日期型別:
  • 日期型別的資料是可以進行運算的,兩個日期型別的值相減,差為相差的天數;給一個日期的值加上一個數字,相當於累加了多少天
          例如:SELECT SYSDATE - TO_DATE('1993-07-05','YYYY-MM-DD') FROM dual
  • DATE --- 最多精確到秒
                         表示定義日期時間的資料,長度 7 個位元組,7 個位元組分別儲存 世紀、年、月、日                          預設格式: DD-MON-RR( 日月年) ,但是秒以下的精度儲存不了                -RR:可以自動判斷世紀                 Sys:表示系統目前的年份, user 表示使用者輸入的年份。                 例如: RR 是03 ,那麼在 sys 中是0-49 這個區間,在 user 中是在0-49 這個區間,它們的交集就是此 RR 表示的世紀——本世紀。
  • TIMESAMP --- 最多精確到納秒
       日期關鍵字:
  • SYSDATE --- 本質是一個 Oracle 的內部函式,返回當前的系統時間,精度為秒,預設顯示格式是 DD-MON-RR.
  • SYSTIMESTAMP --- 返回當前系統日期和時間,精確到毫秒
       日期轉換函式
  • TO_DATE --- 按照字串規定的格式轉換為日期型別
         常用的日期格式:
YY 2位數字的年份
YYYY 4位數字的年份
MM 2位數字的月份
MON 簡拼的月份
MONTH 全拼的月份
DD 2位數的天
DY 周幾的縮寫
DAY 周幾的全拼
HH24 24小時制的小時
HH12 12小時制的小時
MI 顯示分鐘
SS 顯示秒
     例如:SELECT TO_DATE('2015年12月17日','YYYY"年"MM"月"DD"日"') FROM dual
  • TO_CHAR --- 將其它型別的資料轉換為字元型別
     例如: SELECT TO_CHAR(TO_DATE('88-02-22','RR-MM-DD'),'YYYY-MM-DD') FROM dual                 SELECT TO_CHAR(SYSDATE,'YYYY"年"-MM"月"-DD"日"') FROM dual        日期常用的函式:
  • LAST_DAY(date) --- 返回日期date 所在月的最後一天
          例如:SELECT LAST_DAY(SYSDATE) FROM dual
  • ADD_MONTHS(date, i) --- 返回日期 date 加上i 個月後的日期值
          - 引數 i可以是任何數,大部分時候去正值整數           - 如果 i是小數,將會被擷取整數後再參與運算           - 如果 i是負數,則獲得的是減去 i 個月後的日期值           例如:
  • MONTHS_BETWEEN (date1, date2) --- 計算 date1和 date2 兩個日期值之間間隔了多少個月,實際運算是 date1-date2, 越晚,date 就越大。除非兩個月間隔的是整數月,否則會出現小數
          例如: SELECT ename, ADD_MONTHS(hiredate, 20*12) as "紀念日" FROM emp_rs
  • NEXT_DAY(date, char) --- 返回date日期資料的下一個周幾,周幾是由引數char來決定。返回的是離現在的日期還沒到的最近的周幾。
          注意:數字1-7表示週日-週六           例如:SELECT NEXT_DAY(SYSDATE,1) FROM dual
  • LEAST(expr1[,expr2,expr3…]) --- 返回最小的值
          例如:SELECT LEAST(SYSDATE, TO_DATE('2008-03-02','YYYY-MM-DD')) FROM dual
  • GREATEST(expr1[,expr2,expr3…]) --- 返回最大的值
          注意:引數型別必須一致,不過若第 2 個以及後面的引數能夠轉換成前一個型別,那麼可以比較,否則會報錯。           例如:SELECT GREATEST(SYSDATE, TO_DATE('2008-03-02','YYYY-MM-DD')) FROM dual
  • EXTRACT(date FROM datetime) --- 從引數 datetime中提取引數 date 指定的資料。
          例如:SELECT ename, hiredate FROM emp_rs WHERE EXTRACT(YEAR FROM hiredate) = 1981 四、空值型別:NULL        NULL 條件查詢:
  • 當判斷一個欄位的值是否為 NULL 時,不能使用“ =”判斷,而是使用 IS NULL 或者IS NOT NULL 。
     NULL 的運算:
  • NULL 與字串連線,等於什麼都沒幹
  • NULL 與數字運算,結果還是 NULL
     空值函式:
  • NVL(expr1,exp2) --- 將 NULL轉換為非 NULL 值。若expr1 為 null,則函式返回 exp2, 否則就返回expr1 的值。
          例如: SELECT ename, sal, comm,sal+NVL(comm,0) FROM emp_rs
  • NVL2(exp1,exp2,exp3) --- 用來判斷 exp1 是否為NULL ,如果不是,返回 exp2 ,如果是NULL ,返回 exp3。
          例如:SELECT ename, NVL2(comm,'有獎金','沒獎金') as "獎金情況" FROM emp_rs 五、零碎知識 DUAL( 偽表) ,為了滿足 SELECT 語法要求使用,當我們查詢的資料不來自任何一張表時,可以使用偽表代替 FROM 字句中的內容,偽表僅會查詢出一條記錄。