oracle函数操做

感于总有些网友提出一些很是基础的问题,好比有没有实现某某功能的函数啊,某某函数是作什么用的啊,格式是什么等等,同时也感觉到本身对oracle函数认识的不足,因而集中月余时间专一于oracle函数,小有心得不敢私藏,发之与诸公共享。 

    本文并不许备介绍所有的oracle函数,当前情势下,俺也还没这个时间,须要学习的东西太多了,要把多数时间花在学习常常能用上的技术方面:),因此如 果是准备深刻了解全部oracle函数的朋友,仍是去关注: Oracle SQL Reference官方文档更靠谱一些 。 

  本文更多将会介绍三思在平常中常常会用到的,或者虽然不多用到,可是感受挺有意思的一些函数。分二类介绍,分别是: 
  著名函数篇 -常常用到的函数 
  非著名函数篇-即虽然不多用到,但某些状况下却很实用 


     注:N表示数字型,C表示字符型,D表示日期型,[]表示内中参数可被忽略,fmt表示格式。 

  单值函数在查询中返回单个值,可被应用到select,where子句,start with以及connect by 子句和having子句。 
(一).数值型函数(Number Functions) 
    数值型函数输入数字型参数并返回数值型的值。多数该类函数的返回值支持38位小数点,诸如:COS, COSH, EXP, LN, LOG, SIN, SINH, SQRT, TAN, and TANH 支持36位小数点。ACOS, ASIN, ATAN, and ATAN2支持30位小数点。 

一、MOD(n1,n2) 返回n1除n2的余数,若是n2=0则返回n1的值。 
    例如:SELECT MOD(24,5) FROM DUAL; 

二、ROUND(n1[,n2]) 返回四舍五入小数点右边n2位后n1的值,n2缺省值为0,若是n2为负数就舍入到小数点左边相应的位上(虽然oracle documents上提到n2的值必须为整数,事实上执行时此处的判断并不严谨,即便n2为非整数,它也会自动将n2取整后作处理,可是我文档中其它提到 必须为整的地方须要特别注意,若是不为整执行时会报错的)。 
例如:SELECT ROUND(23.56),ROUND(23.56,1),ROUND(23.56,-1) FROM DUAL; 

三、TRUNC(n1[,n2] 返回截尾到n2位小数的n1的值,n2缺省设置为0,当n2为缺省设置时会将n1截尾为整数,若是n2为负值,就截尾在小数点左边相应的位上。 
例如:SELECT TRUNC(23.56),TRUNC(23.56,1),TRUNC(23.56,-1) FROM DUAL;

(二).字符型函数返回字符值(Character Functions Returning Character Values) 
  该类函数返回与输入类型相同的类型。 
 返回的CHAR类型值长度不超过2000字节; 
 返回的VCHAR2类型值长度不超过4000字节; 
若是上述应返回的字符长度超出,oracle并不会报错而是直接截断至最大可支持长度返回。 

 返回的CLOB类型值长度不超过4G; 
对于CLOB类型的函数,若是返回值长度超出,oracle不会返回任何错误而是直接抛出错误。 

一、LOWER(c) 将指定字符串内字符变为小写,支持CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB,NCLOB类型 
    例如:SELECT LOWER('WhaT is tHis') FROM DUAL; 

二、UPPER(c) 将指定字符串内字符变为大写,支持CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB,NCLOB类型 
    例如:SELECT UPPER('WhaT is tHis') FROM DUAL; 

三、LPAD(c1,n[,c2]) 返回指定长度=n的字符串,须要注意的有几点: 
 若是n<c1.length则从右到左截取指定长度返回; 
 若是n>c1.length and c2 is null,以空格从左向右补充字符长度至n并返回; 
 若是n>c1.length and c2 is not null,以指定字符c2从左向右补充c1长度至n并返回; 
例如:SELECT LPAD('WhaT is tHis',5),LPAD('WhaT is tHis',25),LPAD('WhaT is tHis',25,'-') FROM DUAL; 
最后你们再猜一猜,若是n<0,结果会怎么样 

四、RPAD(c1,n[,c2]) 返回指定长度=n的字符串,基本与上同,不过补充字符是从右向左方向正好与上相反; 
    例如:SELECT RPAD('WhaT is tHis',5),RPAD('WhaT is tHis',25),RPAD('WhaT is tHis',25,'-') FROM DUAL; 

五、TRIM([[LEADING||TRAILING||BOTH] c2 FROM] c1) 哈哈,被俺无敌的形容方式搞晕头了吧,这个地方仍是看图更明了一些。 
看起来很复杂,理解起来很简单: 
 若是没有指定任何参数则oracle去除c1头尾空格 
例如:SELECT TRIM(' WhaT is tHis ') FROM DUAL; 
 若是指定了c2参数,则oracle去掉c1头尾c2(这个建议细致测试,有多种不一样情形的哟) 
例如:SELECT TRIM('W' FROM 'WhaT is tHis w W') FROM DUAL; 
 若是指定了leading参数则会去掉c1头部c2 
例如:SELECT TRIM(leading 'W' FROM 'WhaT is tHis w W') FROM DUAL; 
 若是指定了trailing参数则会去掉c1尾部c2 
例如:SELECT TRIM(trailing 'W' FROM 'WhaT is tHis w W') FROM DUAL; 
 若是指定了both参数则会去掉c1头尾c2(跟不指定有区别吗?没区别!) 
例如:SELECT TRIM(both 'W' FROM 'WhaT is tHis w W') FROM DUAL; 

注意:c2长度=1 

六、LTRIM(c1[,c2]) 千万表觉得与上面那个长的像,功能也与上面的相似,本函数是从字符串c1左侧截取掉与指定字符串c2相同的字符并返回。若是c2为空则默认截取空格。 
例如:SELECT LTRIM('WWhhhhhaT is tHis w W','Wh') FROM DUAL; 

七、RTRIM(c1,c2)与上同,不过方向相反 
    例如:SELECT RTRIM('WWhhhhhaT is tHis w W','W w') FROM DUAL; 

八、REPLACE(c1,c2[,c3]) 将c1字符串中的c2替换为c3,若是c3为空,则从c1中删除全部c2。 
    例如:SELECT REPLACE('WWhhhhhaT is tHis w W','W','-') FROM DUAL; 

九、SOUNDEX(c) 神奇的函数啊,该函数返回字符串参数的语音表示形式,对于比较一些读音相同,可是拼写不一样的单词很是有用。计算语音的算法以下: 
 保留字符串首字母,但删除a、e、h、i、o、w、y。 
 将下表中的数字赋给相对应的字母: 
1:b、f、p、v 
2:c、g、k、q、s、x、z 
3:d、t 
4:l 
5:m、n 
6:R 
 若是字符串中存在拥有相同数字的2个以上(包含2个)的字母在一块儿(例如b和f),或者只有h或w,则删除其余的,只保留1个; 
 只返回前4个字节,不够用0填充 
例如:SELECT SOUNDEX('dog'),soundex('boy') FROM DUAL; 

十、SUBSTR(c1,n1[,n2]) 截取指定长度的字符串。稍不注意就可能充满了陷阱的函数。 
n1=开始长度; 
n2=截取的字符串长度,若是为空,默认截取到字符串结尾; 
 若是n1=0 then n1=1 
 若是n1>0,则oracle从左向右确认起始位置截取 
例如:SELECT SUBSTR('What is this',5,3) FROM DUAL; 
 若是n1<0,则oracle从右向左数确认起始位置 
例如:SELECT SUBSTR('What is this',-5,3) FROM DUAL; 
 若是n1>c1.length则返回空 
例如:SELECT SUBSTR('What is this',50,3) FROM DUAL; 
而后再请你猜猜,若是n2<1,会如何返回值呢 

十一、TRANSLATE(c1,c2,c3) 就功能而言,此函数与replace有些类似。但须要注意的一点是,translate是绝对匹配替换,这点与replace函数具备很是大区别。什么是 绝对匹配替换呢?简单的说,是将字符串c1中按必定的格式c2替换为c3。若是文字形容仍然没法理解,咱们经过几具实例来讲明: 
例如: 
SELECT TRANSLATE('What is this','','-') FROM DUAL; 
SELECT TRANSLATE('What is this','-','') FROM DUAL; 
结果都是空。来试试这个: 
SELECT TRANSLATE('What is this',' ',' ') FROM DUAL; 
再来看这个: 
SELECT TRANSLATE('What is this','ait','-*') FROM DUAL; 
是否明白了点呢?Replace函数理解比较简单,它是将字符串中指定字符替换成其它字符,它的字符必须是连续的。而translate中,则是指定字符 串c1中出现的c2,将c2中各个字符替换成c3中位置顺序与其相同的c3中的字符。明白了?Replace是替换,而translate则像是过滤html

(三).字符型函数返回数字值(Character Functions Returning Number Values) 
本类函数支持全部的数据类型 

一、INSTR(c1,c2[,n1[,n2]]) 返回c2在c1中位置 
 c1:原字符串 
 c2:要寻找的字符串 
 n1:查询起始位置,正值表示从左到右,负值表示从右到左 (大小表示位置,好比3表示左面第3处开始,-3表示右面第3处开始)。黑黑,若是为0的话,则返回的也是0 
 n2:第几个匹配项。大于0 
例如:SELECT INSTR('abcdefg','e',-3) FROM DUAL; 

二、LENGTH(c) 返回指定字符串的长度。若是 
例如:SELECT LENGTH('A123中') FROM DUAL; 
猜猜SELECT LENGTH('') FROM DUAL;的返回值是什么 

(四).日期函数(Datetime Functions) 
本类函数中,除months_between返回数值外,其它都将返回日期。 

一、ADD_MONTHS() 返回指定日期月份+n以后的值,n能够为任何整数。 
例如:SELECT ADD_MONTHS(sysdate,12),ADD_MONTHS(sysdate,-12) FROM DUAL; 

二、CURRENT_DATE 返回当前session所在时区的默认时间 
例如: 
SQL> alter session set nls_date_format = 'mm-dd-yyyy' ; 
SQL> select current_date from dual; 

三、SYSDATE 功能与上相同,返回当前session所在时区的默认时间。可是须要注意的一点是,若是同时使用sysdate与current_date得到的时间不一 定相同,某些状况下current_date会比sysdate快一秒。通过与xyf_tck(兄台的大做ORACLE的工做机制写的很好,深刻浅出)的 短暂交流,咱们认为current_date是将current_timestamp中毫秒四舍五入后的返回,虽然没有找到文档支持,可是想来应该八九不 离十。同时,仅是某些状况下会有一秒的偏差,通常状况下并不会对你的操做形成影响,因此了解便可。 
例如:SELECT SYSDATE,CURRENT_DATE FROM DUAL; 

四、LAST_DAY(d) 返回指定时间所在月的最后一天 
例如:SELECT last_day(SYSDATE) FROM DUAL; 

五、NEXT_DAY(d,n) 返回指定日期后第一个n的日期,n为一周中的某一天。可是,须要注意的是n若是为字符的话,它的星期形式须要与当前session默认时区中的星期形式相同。 
例如:三思用的中文nt,nls_language值为SIMPLIFIED CHINESE 
SELECT NEXT_DAY(SYSDATE,5) FROM DUAL; 
SELECT NEXT_DAY(SYSDATE,'星期四') FROM DUAL; 
两种方式均可以取到正确的返回,可是: 
SELECT NEXT_DAY(SYSDATE,'Thursday') FROM DUAL; 
则会执行出错,提供你说周中的日无效,就是这个缘由了。 

六、MONTHS_BETWEEN(d1,d2) 返回d1与d2间的月份差,视d1,d2的值大小,结果可正可负,固然也有可能为0 
例如: 
SELECT months_between(SYSDATE, sysdate), 
months_between(SYSDATE, add_months(sysdate, -1)), 
months_between(SYSDATE, add_months(sysdate, 1)) 
FROM DUAL; 

七、ROUND(d[,fmt]) 前面讲数值型函数的时候介绍过ROUND,此处与上功能基本类似,不过此处操做的是日期。若是不指定fmt参数,则默认返回距离指定日期最近的日期。 
例如:SELECT ROUND(SYSDATE,'HH24') FROM DUAL; 

八、TRUNC(d[,fmt]) 与前面介绍的数值型TRUNC原理相同,不过此处也是操做的日期型。 
例如:SELECT TRUNC(SYSDATE,'HH24') FROM DUAL; 

(五).转换函数(Conversion Functions) 
转换函数将指定字符从一种类型转换为另外一种,一般这类函数遵循以下惯例:函数名称后面跟着待转换类型以及输出类型。 

一、TO_CHAR() 本函数又能够分三小类,分别是 
 转换字符->字符TO_CHAR(c):将nchar,nvarchar2,clob,nclob类型转换为char类型; 
例如:SELECT TO_CHAR('AABBCC') FROM DUAL; 

 转换时间->字符TO_CHAR(d[,fmt]):将指定的时间(data,timestamp,timestamp with time zone)按照指定格式转换为varchar2类型; 
例如:SELECT TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss') FROM DUAL; 

 转换数值->字符TO_CHAR(n[,fmt]):将指定数值n按照指定格式fmt转换为varchar2类型并返回; 
例如:SELECT TO_CHAR(-100, 'L99G999D99MI') FROM DUAL; 

二、TO_DATE(c[,fmt[,nls]]) 将char,nchar,varchar2,nvarchar2转换为日期类型,若是fmt参数不为空,则按照fmt中指定格式进行转换。注意这里的 fmt参数。若是ftm为'J'则表示按照公元制(Julian day)转换,c则必须为大于0并小于5373484的正整数。 
例如: 
SELECT TO_DATE(2454336, 'J') FROM DUAL; 
SELECT TO_DATE('2007-8-23 23:25:00', 'yyyy-mm-dd hh24:mi:ss') FROM DUAL; 

为何公元制的话,c的值必须不大于5373484呢?由于Oracle的DATE类型的取值范围是公元前4712年1月1日至公元9999年12月31日。看看下面这个语句: 
SELECT TO_CHAR(TO_DATE('9999-12-31','yyyy-mm-dd'),'j') FROM DUAL; 

三、TO_NUMBER(c[,fmt[,nls]]) 将char,nchar,varchar2,nvarchar2型字串按照fmt中指定格式转换为数值类型并返回。 
例如:SELECT TO_NUMBER('-100.00', '9G999D99') FROM DUAL; 

(六).其它辅助函数(Miscellaneous Single-Row Functions) 

一、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; 

二、GREATEST(n1,n2,...n) 返回序列中的最大值 
例如:SELECT GREATEST(15,5,75,8) "Greatest" FROM DUAL; 

三、LEAST(n1,n2....n) 返回序列中的最小值 
例如:SELECT LEAST(15,5,75,8) LEAST FROM DUAL; 

四、NULLIF(c1,c2) 
Nullif也是个颇有意思的函数。逻辑等价于:CASE WHEN c1 = c2 THEN NULL ELSE c1 END 
例如:SELECT NULLIF('a','b'),NULLIF('a','a') FROM DUAL; 

五、NVL(c1,c2) 逻辑等价于IF c1 is null THEN c2 ELSE c1 END。c1,c2能够是任何类型。若是二者类型不一样,则oracle会自动将c2转换为c1的类型。 
例如:SELECT NVL(null, '12') FROM DUAL; 

六、NVL2(c1,c2,c3) 你们可能都用到nvl,但你用过nvl2吗?若是c1非空则返回c2,若是c1为空则返回c3
例如:select nvl2('a', 'b', 'c') isNull,nvl2(null, 'b', 'c') isNotNull from dual; 

七、SYS_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; 

八、SYS_CONTEXT(c1,c2[,n]) 将指定命名空间c1的指定参数c2的值按照指定长度n截取后返回。 
Oracle9i提供内置了一个命名空间USERENV,描述了当前session的各项信息,其拥有下列参数: 
 CURRENT_SCHEMA:当前模式名; 
 CURRENT_USER:当前用户; 
 IP_ADDRESS:当前客户端IP地址; 
 OS_USER:当前客户端操做系统用户; 
等等数十项,更详细的参数列还请你们直接参考Oracle Online Documents 

例如:SELECT SYS_CONTEXT('USERENV', 'SESSION_USER') FROM DUAL; 
注:N表示数字型,C表示字符型,D表示日期型,[]表示内中参数可被忽略,fmt表示格式。 

单值函数在查询中返回单个值,可被应用到select,where子句,start with以及connect by 子句和having子句。 
(一).数值型函数(Number Functions) 
数值型函数输入数字型参数并返回数值型的值。多数该类函数的返回值支持38位小数点,诸如:COS, COSH, EXP, LN, LOG, SIN, SINH, SQRT, TAN, and TANH 支持36位小数点。ACOS, ASIN, ATAN, and ATAN2支持30位小数点。 

一、ABS(n) 返回数字的绝对值 
例如:SELECT ABS(-1000000.01) FROM DUAL; 

二、COS(n) 返回n的余弦值 
例如:SELECT COS(-2) FROM DUAL; 

三、ACOS(n) 反余弦函数,n between -1 and 1,返回值between 0 and pi。 
例如:SELECT ACOS(0.9) FROM DUAL; 

四、BITAND(n1,n2) 位与运算,这个太有意思了,虽然没想到可能用到哪里,详细说明一下: 
假设3,9作位与运算,3的二进制形式为:0011,9的二进制形式为:1001,则结果是0001,转换成10进制数为1。 
例如:SELECT BITAND(3,9) FROM DUAL; 

五、CEIL(n) 返回大于或等于n的最小的整数值 
例如:SELECT ceil(18.2) FROM DUAL; 
考你一下,猜猜ceil(-18.2)的值会是什么呢 

六、FLOOR(n) 返回小于等于n的最大整数值 
例如:SELECT FLOOR(2.2) FROM DUAL; 
再猜猜floor(-2.2)的值会是什么呢 

七、BIN_TO_NUM(n1,n2,....n) 二进制转向十进制 
例如:SELECT BIN_TO_NUM(1),BIN_TO_NUM(1,0),BIN_TO_NUM(1,1) FROM DUAL; 

八、SIN(n) 返回n的正玄值,n为弧度。 
例如:SELECT SIN(10) FROM DUAL; 

九、SINH(n) 返回n的双曲正玄值,n为弧度。 
例如:SELECT SINH(10) FROM DUAL; 

十、ASIN(n) 反正玄函数,n between -1 and 1,返回值between pi/2 and -pi/2。 
例如:SELECT ASIN(0.8) FROM DUAL; 

十一、TAN(n) 返回n的正切值,n为弧度 
例如:SELECT TAN(0.8) FROM DUAL; 

十二、TANH(n) 返回n的双曲正切值,n为弧度 
例如:SELECT TANH(0.8) FROM DUAL; 

1三、ATAN(n) 反正切函数,n表示弧度,返回值between pi/2 and -pi/2。 
例如:SELECT ATAN(-444444.9999999) FROM DUAL; 

1四、EXP(n) 返回e的n次幂,e = 2.71828183 ... 
例如:SELECT EXP(3) FROM DUAL; 

1五、LN(n) 返回n的天然对数,n>0 
例如:SELECT LN(0.9) FROM DUAL; 

1六、LOG(n1,n2) 返回以n1为底n2的对数,n1 >0 and not 1 ,n2>0 
例如:SELECT LOG(1.1,2.2) FROM DUAL; 

1七、POWER(n1,n2) 返回n1的n2次方。n1,n2能够为任意数值,不过若是m是负数,则n必须为整数 
例如:SELECT POWER(2.2,2.2) FROM DUAL; 

1八、SIGN(n) 若是n<0返回-1,若是n>0返回1,若是n=0返回0. 
例如:SELECT SIGN(14),SIGN(-14),SIGN(0) FROM DUAL; 

1九、SQRT(n) 返回n的平方根,n为弧度。n>=0 
例如:SELECT SQRT(0.1) FROM DUAL; 

(二).字符型函数返回字符值(Character Functions Returning Character Values) 
  该类函数返回与输入类型相同的类型。 
 返回的CHAR类型值长度不超过2000字节; 
 返回的VCHAR2类型值长度不超过4000字节; 
若是上述应返回的字符长度超出,oracle并不会报错而是直接截断至最大可支持长度返回。 

 返回的CLOB类型值长度不超过4G; 
对于CLOB类型的函数,若是返回值长度超出,oracle不会返回任何错误而是直接抛出错误。 

一、CHR(N[ USING NCHAR_CS]) 返回指定数值在当前字符集中对应的字符 
例如:SELECT CHR(95) FROM DUAL; 

二、CONCAT(c1,c2) 链接字符串,等同于|| 
例如:SELECT concat('aa','bb') FROM DUAL; 

三、INITCAP(c) 将字符串中单词的第一个字母转换为大写,其它则转换为小写 
例如:SELECT INITCAP('whaT is this') FROM DUAL; 

四、NLS_INITCAP(c) 返回指定字符串,并将字符串中第一个字母变大写,其它字母变小写 
例如:SELECT NLS_INITCAP('中华miNZHu') FROM DUAL; 
它还具备一个参数:Nlsparam用来指定排序规则,能够忽略,默认状态该参数为当前session的排序规则。 

(三).字符型函数返回数字值(Character Functions Returning Number Values) 
本类函数支持全部的数据类型 
一、ASCII(c) 与chr函数的用途刚刚相反,本函数返回指定字符在当前字符集下对应的数值。 
例如:SELECT ASCII('_') FROM DUAL; 

(四).日期函数(Datetime Functions) 
本类函数中,除months_between返回数值外,其它都将返回日期。 
一、CURRENT_TIMESTAMP([n]) 返回当前session所在时区的日期和时间。n表示毫秒级的精度,不大于6 
例如:SELECT CURRENT_TIMESTAMP(3) FROM DUAL; 

二、LOCALTIMESTAMP([n]) 与上同,返回当前session所在时区的日期和时间。n表示毫秒级的精度,不大于6 
例如:SELECT LOCALTIMESTAMP(3) FROM DUAL; 

三、SYSTIMESTAMP([n]) 与上同,返回当前数据库所在时区的日期和时间,n表示毫秒级的精度,>0 and <6 
例如:SELECT SYSTIMESTAMP(4) FROM DUAL; 

四、DBTIMEZONE 返回数据库的当前时区 
例如:SELECT DBTIMEZONE FROM DUAL; 

五、SESSIONTIMEZONE 返回当前session所在时区 
例如:SELECT SESSIONTIMEZONE FROM DUAL; 

六、EXTRACT(key from date) key=(year,month,day,hour,minute,second) 从指定时间提到指定日期列 
例如:SELECT EXTRACT(year from sysdate) FROM DUAL; 

七、TO_TIMESTAMP(c1[,fmt]) 将指定字符按指定格式转换为timestamp格式。 
例如:SELECT TO_TIMESTAMP('2007-8-22', 'YYYY-MM-DD HH:MI:SS') FROM DUAL; 

(五).转换函数(Conversion Functions) 
转换函数将指定字符从一种类型转换为另外一种,一般这类函数遵循以下惯例:函数名称后面跟着待转换类型以及输出类型。 

一、BIN_TO_NUM(n1,n2...n) 将一组位向量转换为等价的十进制形式。 
例如:SELECT BIN_TO_NUM(1,1,0) FROM DUAL; 

二、CAST(c as newtype) 将指定字串转换为指定类型,基本只对字符类型有效,好比char,number,date,rowid等。此类转换有一个专门的表列明了哪一种类型能够转换为哪一种类型,此处就不做酹述。 
例如:SELECT CAST('1101' AS NUMBER(5)) FROM DUAL; 

三、CHARTOROWID(c) 将字符串转换为rowid类型 
例如:SELECT CHARTOROWID('A003D1ABBEFAABSAA0') FROM DUAL; 

四、ROWIDTOCHAR(rowid) 转换rowid值为varchar2类型。返回串长度为18个字节。 
例如:SELECT ROWIDTOCHAR(rowid) FROM DUAL; 

五、TO_MULTI_BYTE(c) 将指定字符转换为全角并返回char类型字串 
例如:SELECT TO_MULTI_BYTE('ABC abc 中华') FROM DUAL; 

六、TO_SINGLE_BYTE(c) 将指定字符转换为半角并返回char类型字串 
例如:SELECT TO_SINGLE_BYTE('ABC abc中华') FROM DUAL; 

(六).其它辅助函数(Miscellaneous Single-Row Functions) 
一、COALESCE(n1,n2,....n) 返回序列中的第一个非空值 
例如:SELECT COALESCE(null,5,6,null,9) FROM DUAL; 

二、DUMP(exp[,fmt[,start[,length]]]) 
    dump是个功能很是强悍的函数,对于深刻了解oracle存储的人而言至关有用。因此对于咱们这些仅仅只是应用的人而言就不知道能将其应用于何处了。此处仅介绍用法,不对其功能作深刻分析。

    如上所示,dump拥有很多参数。其本质是以指定格式,返回指定长度的exp的内部表示形式的varchar2值。fmt含4种格 式:8||10||16||17,分别表示8进制,10进制,16进制和单字符,默认为10进制。start参数表示开始位置,length表示以,分隔 的字串数。 
例如:SELECT DUMP('abcdefg',17,2,4) FROM DUAL; 

三、EMPTY_BLOB,EMPTY_CLOB 这两个函数都是返回空lob类型,一般被用于insert和update等语句以初始化lob列,或者将其置为空。EMPTY表示LOB已经被初始化,只不过尚未用来存储数据。 

四、NLS_CHARSET_NAME(n) 返回指定数值对应的字符集名称。 
例如:SELECT NLS_CHARSET_NAME(1) FROM DUAL; 

五、NLS_CHARSET_ID(c) 返回指定字符对应的字符集id。 
例如:SELECT NLS_CHARSET_ID('US7ASCII') FROM DUAL; 

六、NLS_CHARSET_DECL_LEN(n1,n2) 返回一个NCHAR值的声明宽度(以字符为单位).n1是该值以字节为单位的长度,n2是该值的字符集ID 
例如:SELECT NLS_CHARSET_DECL_LEN(100, nls_charset_id('US7ASCII')) FROM DUAL; 

七、SYS_EXTRACT_UTC(timestamp) 返回标准通用时间即格林威治时间。 
例如:SELECT SYS_EXTRACT_UTC(current_timestamp) FROM DUAL; 

八、SYS_TYPEID(object_type) 返回对象类型对应的id。 
例如:这个这个,没有创建过自定义对象,咋作示例? 

九、UID 返回一个惟一标识当前数据库用户的整数。 
例如:SELECT UID FROM DUAL; 

十、USER 返回当前session用户 
例如:SELECT USER FROM DUAL; 

十一、USERENV(c) 该函数用来返回当前session的信息,据oracle文档的说明,userenv是为了保持向下兼容的遗留函数。oracle公司推荐你使用sys_context函数调用USERENV命名空间来获取相关信息,因此你们了解下就好了。 
例如:SELECT USERENV('LANGUAGE') FROM DUAL; 

十二、VSIZE(c) 返回c的字节数。 
例如:SELECT VSIZE('abc中华') FROM DUAL;node

相关文章
相关标签/搜索