在MS Sql Server下,寫sql寫習慣了,突然需要在Oracle下寫sql,說實話原則上沒多大區別,可是有些Oracle內帶函數如果不瞭解,不去用,有時候還挺麻煩。我接下來準備寫個小總結,把做項目中涉及到的一些Oracle函數列舉出來,一方面為了自己以後尋找方便(本人年紀大了,腦袋不好用了,呵呵);另一方面也希望給大家一個方便,通過討論可以互相學習,汲取各種經驗。開始了:
1.NULLIF()
SELECT ename, NULLIF (comm, 0) COMM FROM emp;
ENAME COMM
---------- ----------
SMITH
ALLEN 300
WARD 500
JONES
MARTIN 1400
BLAKE
CLARK
SCOTT
這個函數一看就知道是啥意思,如果comm=0,結果集裡可以用空代替0。
2.COALESCE()
SELECT ename, COALESCE(comm, 0) COMM FROM emp;
ENAME COMM
---------- ----------
SMITH 0
ALLEN 300
WARD 500
JONES 0
MARTIN 1400
BLAKE 0
CLARK 0
SCOTT 0
這個函數意思其實跟上個差不多,只不過可以任意替換想要在結果集裡顯示的值。如下:
SELECT ename, COALESCE(to_char(comm), 'None') COMM FROM emp;
ENAME COMM
---------- ----------
SMITH None
ALLEN 300
WARD 500
JONES None
MARTIN 1400
BLAKE None
CLARK None
SCOTT None
你看一樣吧。
3.NVL()
此函數比較簡單,就是判斷是否為空白,可以設定某個值,比如nvl(a,0,1),意思就是如果a為空白,顯示0,否則為1。
4.lpad() 和 rpad()
select lpad(ename,10,'*'),rpad (ename,10,'>') from emp;
LPAD(ENAME,10,'*') RPAD(ENAME,10,'>')
-------------------- --------------------
*****SMITH SMITH>>>>>
*****ALLEN ALLEN>>>>>
******WARD WARD>>>>>>
*****JONES JONES>>>>>
****MARTIN MARTIN>>>>
*****BLAKE BLAKE>>>>>
*****CLARK CLARK>>>>>
*****SCOTT SCOTT>>>>>
******KING KING>>>>>>
****TURNER TURNER>>>>
*****ADAMS ADAMS>>>>>
LPAD(ENAME,10,'*') RPAD(ENAME,10,'>')
-------------------- --------------------
*****JAMES JAMES>>>>>
******FORD FORD>>>>>>
****MILLER MILLER>>>>
已選擇14行。
從結果可以看出,lpad()函數的作用是:如果列的長度沒有達到指定的值,則在列的左邊不上相應的 字元。rpad()函數是向右補全。
5.greatest () 和 least()
select greatest (1,2,3,4,5) ,least(0,1,2,3,4,5) from dual
GREATEST(1,2,3,4,5) LEAST(0,1,2,3,4,5)
------------------- ------------------
5 0
從結果可以看出,greatest ()函數的作用是:找出列表中最大的值,而least()是找出列表中最小的值。
找個時間繼續擴充,希望大家也協助我繼續擴充。