2016年6月3日 星期五

[Oracle]PL/SQL 常用轉換函數

數字:
ABS(n) 取決對值 ABC(-5) = 5;
CEIL(n) 無條件進位 CEIL(5.9) = 6;
FLOOR(n) 無條件捨去小數 FLOOR(5.9) = 5;
MOD(m,n) 餘數 MOD(5,2) = 1;
POWER(m,n) m的n次方 POWER(2,3) = 8;
ROUND(m,n) 四捨五入到小數點第n位 ROUND(2.54,1) = 2.5;
SIGN(n) n的正負符號 正為1負為-1 SIGN(-4) = -1;
SQRT(n) 平方根 SQRT(9)=3;

日期文字轉換:
TO_CHAR(n or date[,format]) TO_CHAR(sysdate,'YYYYMMDD')
最常用到 TO_CHAR(sysdate,'YYYYMMDD')='20160604'
TO_NUMBER(char)
TO_DATE(char,format)
SELECT TO_DATE ('20160611', 'yyyy-mm-dd') - 10 FROM DUAL
結果會是2016/6/1(日期型態)

時間日期:
SYSDATE [from DUAL]
LAST_DAY(date) date當月份的最後一天 return date
ADD_MONTHS(date, n) date的n個月後(也可使用負值往前推) return date

字串
LPAD(char,m,str) 向左補字元 LPAD(1,2,'0')='01'
RPAD(char,m,str) 向右補字元 RPAD(1,2,'0')='01'
LTRIM(char, str) 向左去字元 LTRIM('01','0') = '1'
RTRIM(char, str) 向右去字元 RTRIM('10','0') = '1'
最常用到的情況是拿來去除空白 ex RTRIM('ABC       ')='ABC'
LOWER(char) 轉小寫
UPPER(char) 轉大寫
REPLACE(char, str1, str2) 替換字元 REPLACE('ABC','B','X') = 'AXC'
SUBSTR(char, m, n) 切字元 SUBSTR('ABC',1,2)='BC'
INSTR(m,n) 傳回n字串在m字串中的位置(切符號分隔字串)
ex:INSTR('ABCD','CD’)=3 or INSTR('CD','ABCD')=0
LENGTH(char) 字元長度
GREATEST(n1,n2) 取大值
LEAST(n1,n2) 取小值


計算字元出現次數
SELECT length(translate('aabbaddddccaaa', 'a'||'aabbaddddccaaa','a')) FROM dual
ANS:6
translate語法會將 原字串裡的a更換為a , aabbaddddccaaa 更換為空
更換完後使用length計算字串長度可得出字元出現次數

沒有留言:

張貼留言