1. 程式人生 > >oracle業務中經常用到的方便函式

oracle業務中經常用到的方便函式

在業務中,經常會遇到各種轉換問題和計算問題,以及排除空值捕獲異常等問題,其實很多工作,都可以交給資料庫自己來做,這樣,可以很大程度上美化程式碼,並在一定程度上,提高程式碼執行的效率,以下是我收集並總結的常用oracle函式,個人認為很好用,與大家分享,具體如下:

SELECT ROUND(23.56),ROUND(23.56,1),ROUND(23.56,-1) FROM DUAL; --24、23.6、20四捨五入
SELECT MOD(24,5) FROM DUAL;--4,取餘
SELECT MOD(24,0) FROM DUAL;--25,除數為5時返回元資料
SELECT TRUNC(23.56),TRUNC(23.56,1),TRUNC(23.56,-1) FROM DUAL;--23、23.5、20擷取
SELECT LOWER('WhaT is tHis') FROM DUAL;--轉小寫
SELECT UPPER('WhaT is tHis') FROM DUAL;--轉大寫
SELECT LPAD('WhaT is tHis',5),LPAD('WhaT is tHis',25),LPAD('WhaT is tHis',25,'-') FROM DUAL; --擷取,不足填充
SELECT RPAD('WhaT is tHis',5),RPAD('WhaT is tHis',25),RPAD('WhaT is tHis',25,'-') FROM DUAL; --方向與上相反
SELECT TRIM(' WhaT is tHis ') FROM DUAL;--去除頭尾空格
SELECT LTRIM('WWhhhhhaT is tHis w W','Wh') FROM DUAL; --遞迴從左擷取‘’內的內容,預設為空格,上面的也可以帶引數
SELECT RTRIM('WWhhhhhaT is tHis w W','W w') FROM DUAL; --與上相反
SELECT REPLACE('WWhhhhhaT is tHis w W','W','-') FROM DUAL; --替換
SELECT SUBSTR('What is this',5,3) FROM DUAL; --擷取,從左邊從0開始
SELECT SUBSTR('What is this',-5,3) FROM DUAL;--從右邊從-1開始
SELECT INSTR('abcdefg','e',-3) FROM DUAL; --5返回位置,從1開始
SELECT LENGTH('A123中') FROM DUAL; --字串長度,中文長度為2
SELECT ADD_MONTHS(sysdate,12),ADD_MONTHS(sysdate,-12) FROM DUAL;--月份計算
SELECT SYSDATE,CURRENT_DATE FROM DUAL;--當前時間
SELECT last_day(SYSDATE) FROM DUAL;--當月最後一天的時間
SELECT NEXT_DAY(SYSDATE,6) FROM DUAL; --當前日期後一個n的日期
SELECT NEXT_DAY(SYSDATE,'星期日') FROM DUAL; --當前日期後一個n的日期
SELECT months_between(SYSDATE, sysdate),months_between(SYSDATE, add_months(sysdate, -1)),months_between(SYSDATE, add_months(sysdate, 1))FROM DUAL;--月差
SELECT ROUND(SYSDATE,'HH24') FROM DUAL;SELECT TRUNC(SYSDATE) FROM DUAL; --日期擷取,引數表示精度
SELECT TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss') FROM DUAL; --轉換字串
SELECT TO_DATE('2007-8-23 23:25:00', 'yyyy-mm-dd hh24:mi:ss') FROM DUAL; --字串轉日期
select decode('a2','a1','true1','a2','true2','default') from dual; --增強型的if else
SELECT NVL(null, '12') FROM DUAL; --邏輯等價於IF c1 is null THEN c2 ELSE c1 END
SELECT NULLIF('a','b'),NULLIF('a','a') FROM DUAL; --邏輯等價於:CASE WHEN c1 = c2 THEN NULL ELSE c1 END 
select nvl2('a', 'b', 'c') isNull,nvl2(null, 'b', 'c') isNotNull from dual; --3元式
SELECT ABS(-1000000.01) FROM DUAL; --絕對值
SELECT COS(-2) FROM DUAL;SELECT ACOS(0.9) FROM DUAL;--餘弦與反餘弦
SELECT ceil(18.2) FROM DUAL; --CEIL(n) 返回大於或等於n的最小的整數值 
SELECT FLOOR(2.2) FROM DUAL;--FLOOR(n) 返回小於等於n的最大整數值 
SELECT concat('aa','bb') FROM DUAL; --連結字串
SELECT CURRENT_TIMESTAMP(3) FROM DUAL;SELECT LOCALTIMESTAMP(3) FROM DUAL;  --毫秒級的時間
select sysdate, sysdate+numtodsinterval(1,'hour') from dual ;--小時計算
select sysdate, sysdate+numtodsinterval(50,'minute') from dual ;--分鐘計算
select sysdate, sysdate+3 from dual ;--天數計算
select sysdate, sysdate+numtodsinterval(45,'second') from dual ;--秒計算