oracle 函数(字符串)

 

1.CHARTOROWID 
将字符数据类型转换为ROWID类型  这有什么用
SQL> select rowid,rowidtochar(rowid),ename from scott.emp; 

ROWID ROWIDTOCHAR(ROWID) ENAME

------------------ ------------------ ---------- 
AAAAfKAACAAAAEqAAA AAAAfKAACAAAAEqAAA SMITH 
AAAAfKAACAAAAEqAAB AAAAfKAACAAAAEqAAB ALLEN 
AAAAfKAACAAAAEqAAC AAAAfKAACAAAAEqAAC WARD 
AAAAfKAACAAAAEqAAD AAAAfKAACAAAAEqAAD JONES 


2.CONVERT(c,dset,sset) 
将源字符串 sset从一个语言字符集转换到另一个目的dset字符集 
SQL> select convert('strutz','we8hp','f7dec') "conversion" from dual; 

conver 
------ 
strutz 


3.HEXTORAW 
将一个十六进制构成的字符串转换为二进制 


4.RAWTOHEXT 
将一个二进制构成的字符串转换为十六进制 



5.ROWIDTOCHAR 
ROWID数据类型转换为字符类型 

 

6.TO_MULTI_BYTE 
将字符串中的单字节字符转化为多字节字符  什么意思?
SQL> select to_multi_byte('
') from dual; 

TO 
-- 
 


7.TO_NUMBER 
将给出的字符转换为数字 
SQL> select to_number('1999') year from dual; 

YEAR 
--------- 
1999 


8.BFILENAME(dir,file) 
指定一个外部二进制文件 
SQL>insert into file_tb1 values(bfilename('lob_dir1','image1.gif')); 


9.CONVERT('x','desc','source') 
x字段或变量的源source转换为desc 
SQL> select sid,serial#,username,decode(command, 
2 0,'none', 
3 2,'insert', 
4 3, 
5 'select', 
6 6,'update', 
7 7,'delete', 
8 8,'drop', 
9 'other') cmd from v$session where type!='background'; 

SID SERIAL# USERNAME CMD 
--------- --------- ------------------------------ ------

1 1 none 
2 1 none 
3 1 none 
4 1 none 
5 1 none 
6 1 none 
7 1275 none 
8 1275 none 
9 20 GAO select 
10 40 GAO none 

 

 

10.DUMP(s,fmt,start,length) 
DUMP
函数以fmt指定的内部数字格式返回一个VARCHAR2类型的值 
SQL> col global_name for a30 
SQL> col dump_string for a50 
SQL> set lin 200 
SQL> select global_name,dump(global_name,1017,8,5) dump_string from global_name; 

GLOBAL_NAME DUMP_STRING 
------------------------------ -------------------------------------------------- 
ORACLE.WORLD Typ=1 Len=12 CharacterSet=ZHS16GBK: W,O,R,L,D 


11.EMPTY_BLOB()
EMPTY_CLOB() 
这两个函数都是用来对大数据类型字段进行初始化操作的函数 

12.GREATEST 
返回一组表达式中的最大值,即比较字符的编码大小
SQL> select greatest('AA','AB','AC') from dual; 

GR 
-- 
AC 
SQL> select greatest('
','','') from dual; 

GR 
-- 
 


13.LEAST 
返回一组表达式中的最小值 
SQL> select least('
','','') from dual; 

LE 
-- 
 

系统函数
14.UID

返回标识当前用户的唯一整数 
SQL> show user 
USER 
"GAO" 
SQL> select username,user_id from dba_users where user_id=uid; 

USERNAME USER_ID 
------------------------------ --------- 
GAO 25 



15.USER 
返回当前用户的名字 
SQL> select user from dual; 

USER 
------------------------------ 
GAO 


16.USEREVN 
返回当前用户环境的信息,opt可以是
ENTRYID,SESSIONID,TERMINAL,ISDBA,LABLE,LANGUAGE,CLIENT_INFO,LANG,VSIZE 
ISDBA 
查看当前用户是否是DBA如果是则返回true 
SQL> select userenv('isdba') from dual; 

USEREN 

------ 
FALSE 
SQL> select userenv('isdba') from dual; 

USEREN 
------ 
TRUE 
SESSION 
返回会话标志 
SQL> select userenv('sessionid') from dual; 

USERENV('SESSIONID') 
-------------------- 

152  
ENTRYID 
返回会话人口标志 
SQL> select userenv('entryid') from dual; 

USERENV('ENTRYID') 
------------------ 

INSTANCE 
返回当前INSTANCE的标志 
SQL> select userenv('instance') from dual; 

USERENV('INSTANCE') 
------------------- 

LANGUAGE 
返回当前环境变量 
SQL> select userenv('language') from dual; 

USERENV('LANGUAGE') 
---------------------------------------------------- 
SIMPLIFIED CHINESE_CHINA.ZHS16GBK 
LANG 
返回当前环境的语言的缩写 
SQL> select userenv('lang') from dual; 

 

USERENV('LANG') 
---------------------------------------------------- 
ZHS 
TERMINAL 
返回用户的终端或机器的标志 
SQL> select userenv('terminal') from dual; 

USERENV('TERMINA 
---------------- 
GAO 

 

 


VSIZE(X) 
返回X的大小(字节) 
SQL> select vsize(user),user from dual; 

VSIZE(USER) USER 
----------- ------------------------------ 
6 SYSTEM 

 

 

17.取一些系统信息

 

SYS_CONTEXT(c1,c2[,n]) 将指定命名空间c1的指定参数c2的值按照指定长度n截取后返回

Oracle9i提供内置了一个命名空间USERENV,描述了当前session的各项信息,其拥有下列参数

select

SYS_CONTEXT('USERENV','TERMINAL') terminal,--返回当前终端计算机的名称

SYS_CONTEXT('USERENV','LANGUAGE') language, --返回当前的语言环境

SYS_CONTEXT('USERENV','SESSIONID') sessionid, --返回session id

SYS_CONTEXT('USERENV','INSTANCE') instance,  

SYS_CONTEXT('USERENV','ENTRYID') entryid, --返回会话人口标志

SYS_CONTEXT('USERENV','ISDBA') isdba, --查看当前用戶是否是DBA﹐如果是則返回true;

SYS_CONTEXT('USERENV','NLS_TERRITORY') nls_territory, --国别

SYS_CONTEXT('USERENV','NLS_CURRENCY') nls_currency,   --币种

SYS_CONTEXT('USERENV','NLS_CALENDAR') nls_calendar,  

SYS_CONTEXT('USERENV','NLS_DATE_FORMAT') nls_date_format, --时间格式

SYS_CONTEXT('USERENV','NLS_DATE_LANGUAGE') nls_date_language, --语言格式

SYS_CONTEXT('USERENV','NLS_SORT') nls_sort,

SYS_CONTEXT('USERENV','CURRENT_USER') current_user, --用户名

SYS_CONTEXT('USERENV','CURRENT_USERID') current_userid, --当前用户ID

SYS_CONTEXT('USERENV','SESSION_USER') session_user,

SYS_CONTEXT('USERENV','SESSION_USERID') session_userid,

SYS_CONTEXT('USERENV','PROXY_USER') proxy_user,

SYS_CONTEXT('USERENV','PROXY_USERID') proxy_userid,

SYS_CONTEXT('USERENV','DB_DOMAIN') db_domain,

SYS_CONTEXT('USERENV','DB_NAME') db_name, --数据库的名称

SYS_CONTEXT('USERENV','HOST') host, --当前用户的主机

SYS_CONTEXT('USERENV','OS_USER') os_user, --当前客户端操作系统用户

SYS_CONTEXT('USERENV','EXTERNAL_NAME') external_name,

SYS_CONTEXT('USERENV','IP_ADDRESS') ip_address, --当前客户端IP地址

SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') network_protocol,

SYS_CONTEXT('USERENV','BG_JOB_ID') bg_job_id,

SYS_CONTEXT('USERENV','FG_JOB_ID') fg_job_id,

SYS_CONTEXT('USERENV','AUTHENTICATION_TYPE') authentication_type,

SYS_CONTEXT('USERENV','AUTHENTICATION_DATA') authentication_data

from dual

18.DECODE(exp,s1,r1,s2,r2..s,r[,def])

 可以把它理解成一个增强型的if else,只不过它并不通过多行语句,而是在一个函数内实现if else的功能。

exp做为初始参数。s做为对比值,相同则返回r,如果s有多个,则持续遍历所有s,直到某个条件为真为止,否则返回默认值def(如果指定了的话),如果没有默认值,并且前面的对比也都没有为真,则返回空。

毫无疑问,decode是个非常重要的函数,在实现行转列等功能时都会用到,需要牢记和熟练使用。

例如:select decode('a2','a1','true1','a2','true2','default') from dual;

 

19NULLIF(c1,c2)

Nullif也是个很有意思的函数。逻辑等价于:CASE WHEN c1 = c2 THEN NULL ELSE c1 END

例如:SELECT NULLIF('a','b'),NULLIF('a','a') FROM DUAL;

 

20NVL(c1,c2) 逻辑等价于IF c1 is null THEN c2 ELSE c1 ENDc1,c2可以是任何类型。如果两者类型不同,则oracle会自动将c2转换为c1的类型。

例如:SELECT NVL(null, '12') FROM DUAL;

 

6NVL2(c1,c2,c3)  大家可能都用到nvl,但你用过nvl2吗?如果c1非空则返回c2,如果c1为空则返回c3

例如:select nvl2('a', 'b', 'c') isNull,nvl2(null, 'b', 'c') isNotNull from dual;

 

7SYS_CONNECT_BY_PATH(col,c)  该函数只能应用于树状查询。返回通过c1连接的从根到节点的路径。该函数必须与connect by 子句共同使用。

 

例如:

 

create table tmp3(

rootcol varchar2(10),

nodecol varchar2(10)

);

 

insert into tmp3 values ('','a001');

insert into tmp3 values ('','b001');

insert into tmp3 values ('a001','a002');

insert into tmp3 values ('a002','a004');

insert into tmp3 values ('a001','a003');

insert into tmp3 values ('a003','a005');

insert into tmp3 values ('a005','a008');

insert into tmp3 values ('b001','b003');

insert into tmp3 values ('b003','b005');

 

select lpad(' ', level*10,'=') ||'>'|| sys_connect_by_path(nodecol,'/')

from tmp3

start with rootcol = 'a001'

connect by prior nodecol =rootcol;













 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值