一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Oracle反转倒置函数及单行转换函数

时间:2015-03-17 编辑:简简单单 来源:一聚教程网

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

热门栏目