Oracle反轉倒置函數
Oracle提供了一個反轉倒置函數reverse,但此函數不能分組倒置,本文提供了一個即可分組倒置的函數,如下所示:
CREATE OR REPLACE FUNCTION REVERSE_F(p_str VARCHAR2, p_delimiter VARCHAR2:='')
RETURN VARCHAR2 IS
v_return VARCHAR2(4000);
vp_str VARCHAR2(4000) := p_str;
v_idx number;
vp_len number := length(p_delimiter);
BEGIN
if (p_delimiter is null) then
select reverse(p_str) into v_return from dual;
else
loop
v_idx := instr(vp_str, p_delimiter);
if (v_idx = 0) then
v_return := vp_str || v_return;
exit;
elsif (v_idx = 1) then
v_return := substr(vp_str, 1, vp_len) || v_return;
vp_str := substr(vp_str, vp_len + 1);
else
v_return := substr(vp_str, 1, v_idx - 1) || v_return;
vp_str := substr(vp_str, v_idx);
end if;
end loop;
end if;
RETURN v_return;
END REVERSE_F;
Oracle函數之單行轉換函式
1 ASCIISTR
格式:ASCIISTR(C)
說明:將字串C轉換為ASCII字串,即將C中的ASCII字元保留不變,但非ASCII字元則以ASCII表示返回
舉例:
SQL>SELECT ASCIISTR('AB?CDE資料庫') A FROM DUAL;
A
---------------------
AB?CDE6570636E5E93
2 BIN_TO_NUM
格式:BIN_TO_NUM(n1,n2,n3...)
說明:每位由n1,n2,n3等組成的二進位轉換為十進位
舉例:
SQL>SELECT BIN_TO_NUM(1,1,1,1) A FROM DUAL;
A
----------
15
3 CAST
格式:CAST(CAS T)
說明:將運算式C轉換成資料類型T。T可以是內量資料類型,也可以是程式員自訂的資料類型。前提是能夠轉換才可以轉換
舉例:
SQL>SELECT CAST('12345' AS NUMBER) A FROM DUAL;
A
----------
12345
4 DECODE
格式:DECODE(x,if 1,then 1, if 2 then 2 ,.., else z)
說明:將x與if值進行比較,如果等於if n就返回then n.否則就返回else z
舉例:
SQL>SELECT DECODE(1,1,0,-1) AS A,DECODE(1,0,0,-1) AS B FROM DUAL;
AB
--------------------
0-1
5 NUMTODSINTERVAL
格式:NUMTODSINTERVAL(N,C)
說明:把數字N轉換成C指定的INTERVALDAY TO SECOND類型的資料。C的取值為DAY,HOUR,MINUTE,SECOND。C的大小寫無關
舉例:
SQL>SELECT SYSDATE+NUMTODSINTERVAL(10,'DAY') A,SYSDATE+NUMTODSINTERVAL(10,'HOUR') BFROM DUAL;
AB
-----------------------------------
2014/7/1117:20:11 2014/7/2 3:20:11
6 NUMTOYMINTERVAL
格式:NUMTODSINTERVAL(N,C)
說明:把數字N轉換成C指定的INTERVALDAY TO SECOND類型的資料。C的取值為YEAR、MONTH。C的大小寫無關
舉例:
SQL>SELECT SYSDATE+NUMTOYMINTERVAL(10,'YEAR') A,SYSDATE+NUMTOYMINTERVAL(10,'MONTH')B FROM DUAL;
AB
----------------------------------------
2024/7/117:24:182015/5/1 17:24:18
7 TO_CHAR
格式:TO_CHAR(X[,fmt])
說明:將X按fmt格式轉換成字串。X可以是一個日期或者數字,也可以是一個字串,fmt是一個規定了X採用何種格式轉換的格式字串
舉例:
SQL>SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') A,TO_CHAR(111) B FROM DUAL;
AB
-------------
2014-07-02111
8 TO_CLOB
格式:TO_CLOB(x)
說明:將LOB列中的NCLOB值或其他字串x轉換成CLOB值
舉例:
SQL>SELECT TO_CLOB('AAAA') A FROM DUAL;
A
--------------------------------------------------------------------------------
AAAA
9 TO_DATE
格式:TO_DATE(C[,fmt])
說明:將符合fmt指定的特定日期格式的字串C轉換成DATE類型的資料
舉例:
SQL>SELECT TO_DATE('2014-07-02','YYYY-MM-DD') A,TO_DATE('2014-07','YYYY-MM') B FROMDUAL;
AB
----------------------
2014/7/22014/7/1
10 TO_DSINTERVAL
格式:TO_DSINTERVAL(C)
說明:將符合特定格式的字串C轉換成INTERVALDAY TO SECOND類型的資料
舉例:
SQL>SELECTSYSDATE+TO_DSINTERVAL('1000:00:00') A FROM DUAL;
A
-----------------
2014/7/128:49:39
11 TO_LOB
格式:TO_LOB(X)
說明:將LONG列中的值X轉換成LOB列的值
舉例:
12 TO_NUMBER
格式:TO_NUMBER(C[,fmt])
說明:將符合fmt指定的特定數字格式的字串C轉換成數字類型的資料
舉例:
SQL>SELECT TO_NUMBER('0101') A FROM DUAL;
A
----------
101
13 TO_TIMESTAMP
格式:TO_TIMESTAMP(C)
說明:將字串C轉換為一個TIMESTAMP資料類型
舉例:
SQL>SELECTTO_TIMESTAMP('2014-07-1214:10:10.12320', 'YYYY-MM-dd HH24:MI:SS.FF') A FROM DUAL;
A
--------------------------------------------------------------------------------
12-7月-14 02.10.10.123200000下午
14 TO_TIMESTAMP_TZ
格式:TO_TIMESTAMP_TZ(C[, fmt])
說明:將符合fmt指定的特定日期格式的字串C轉換成TIMESTAMPWITH TIMEZONE類型的資料,帶時區
舉例:
SQL>SELECTTO_TIMESTAMP_TZ('2014-07-1214:10:10.12320', 'YYYY-MM-dd HH24:MI:SS.FF') A FROM DUAL;
A
--------------------------------------------------------------------------------
12-7月-14 02.10.10.123200000下午 +08:00
15 TO_YMINTERVAL
格式:TO_YMINTERVAL(C)
說明:將符合特定格式的字串C轉換成INTERVALYEAR TO MONTH類型的資料
舉例:
SQL>SELECTSYSDATE+TO_YMINTERVAL('01-03') AFROM DUAL;
A
-----------------
2015/10/29:26:45
16 TRANSLATE
格式:TRANSLATE(X,if y, then z)
說明:查看X中的每個字元,然後查看該字元在if y中是否存在。如果存在,就在if y中找到該字元的位置,然後用then z中相同位置的字元替代該字元,最後返回全部替代之後的X
舉例:
SQL>SELECT TRANSLATE('abcdefghij','abcdef','123456') A FROM dual;
A
----------
123456ghij
17 UNISTR
格式:UNISTR(c)
說明:返回字串c對應的UNICOOE字元
舉例:
SQL>SELECTUNISTR('01-03') A FROM DUAL;
A
01-03