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位小数点。

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

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

3、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不会返回任何错误而是直接抛出错误。

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

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

3、LPAD(c1,n[,c2]) 返回指定长度=n的字符串,需要注意的有几点:
 如果n 如果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
4、RPAD(c1,n[,c2]) 返回指定长度=n的字符串,基本与上同,不过补充字符是从右向左方向正好与上相反;
例如:SELECT RPAD(‘WhaT is tHis’,5),RPAD(‘WhaT is tHis’,25),RPAD(‘WhaT is tHis’,25,’-‘) FROM DUAL;

5、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

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

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

8、REPLACE(c1,c2[,c3]) 将c1字符串中的c2替换为c3,如果c3为空,则从c1中删除所有c2。
例如:SELECT REPLACE(‘WWhhhhhaT is tHis w W’,’W’,’-‘) FROM DUAL;

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

10、SUBSTR(c1,n1[,n2]) 截取指定长度的字符串。稍不注意就可能充满了陷阱的函数。
n1=开始长度;
n2=截取的字符串长度,如果为空,默认截取到字符串结尾;
 如果n1=0 then n1=1
 如果n1>0,则oracle从左向右确认起始位置截取
例如:SELECT SUBSTR(‘What is this’,5,3) FROM DUAL;
 如果n1例如:SELECT SUBSTR(‘What is this’,-5,3) FROM DUAL;
 如果n1>c1.length则返回空
例如:SELECT SUBSTR(‘What is this’,50,3) FROM DUAL;
然后再请你猜猜,如果n2
11、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则像是过滤

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

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

2、LENGTH(c) 返回指定字符串的长度。如果
例如:SELECT LENGTH(‘A123中’) FROM DUAL;
猜猜SELECT LENGTH(”) FROM DUAL;的返回值是什么

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

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

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

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

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

5、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;
则会执行出错,提供你说周中的日无效,就是这个原因了。

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

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

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

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

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

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

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

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

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

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

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

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

5、NVL(c1,c2) 逻辑等价于IF c1 is null THEN c2 ELSE c1 END。c1,c2可以是任何类型。如果两者类型不同,则oracle会自动将c2转换为c1的类型。
例如:SELECT NVL(null, ’12’) FROM DUAL;

6、NVL2(c1,c2,c3) 大家可能都用到nvl,但你用过nvl2吗?如果c1非空则返回c2,如果c1为空则返回c3
例如:select nvl2(‘a’, ‘b’, ‘c’) isNull,nvl2(null, ‘b’, ‘c’) isNotNull from dual;

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

8、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位小数点。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

18、SIGN(n) 如果n0返回1,如果n=0返回0.
例如:SELECT SIGN(14),SIGN(-14),SIGN(0) FROM DUAL;

19、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不会返回任何错误而是直接抛出错误。

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

2、CONCAT(c1,c2) 连接字符串,等同于||
例如:SELECT concat(‘aa’,’bb’) FROM DUAL;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

12、VSIZE(c) 返回c的字节数。
例如:SELECT VSIZE(‘abc中华’) FROM DUAL;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/896129.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Java空指针异常预防 Java Optional使用与NPE避免技巧
上一篇 2025年11月28日 17:53:19
超能世界100连抽兑换码永久有效 超能世界100连抽兑换码最新2023汇总
下一篇 2025年11月28日 17:54:08

相关推荐

  • MAC系统怎么开启防火墙_MAC开启防火墙教程

    1、建议在Mac系统中开启防火墙以提升网络安全,可通过“系统设置”中的“网络-防火墙”选项启用;2、高级用户可使用终端命令sudo /usr/libexec/ApplicationFirewall/socketfilterfw –setglobalstate on开启服务;3、启用后可在…

    2026年9月24日
    100
  • 如何在Linux中切换用户身份?

    Linux中切换用户主要用su和sudo命令;2. su切换用户需密码,su -可加载完整环境;3. sudo允许授权用户以root等身份执行命令而无需对方密码;4. 推荐使用sudo -i或sudo su -切换到root;5. 普通用户需加入sudo组或配置/etc/sudoers文件;6. 编…

    2026年9月24日
    100
  • 如何在mysql中升级高可用集群

    先确认版本兼容性、应用依赖及备份完整性,再按架构选择升级路径。对Group Replication或InnoDB Cluster采用滚动升级,先升从节点最后升主节点;MHA/Orchestrator架构先升备库再切换主库;PXC需停集群全量升级。替换二进制后启动实例并运行mysql_upgrade,…

    2026年9月24日
    000
  • 绝美后背! 日本妹子cos《寂静岭f》深水雏子

    绝美后背! 日本妹子cos《寂静岭f》深水雏子绝美后背! 日本妹子cos《寂静岭f》深水雏子绝美后背! 日本妹子cos《寂静岭f》深水雏子绝美后背! 日本妹子cos《寂静岭f》深水雏子

    《寂静岭f》女主角深水雏子近日在社交平台上引发热议,看似是普通的日本高中女生,实则性格果决、战斗力爆表。手持铁管正面硬刚女鬼的场面令人印象深刻,干脆利落的战斗风格让她迅速被玩家封神,成为《寂静岭》系列中最具冲击力的新角色之一。拥有30万粉丝的人气coser月海つくね(@XaiabP)也忍不住致敬这位…

    2026年9月24日 用户投稿
    100
  • 减少PHP与MySQL数据库通信的延迟

    减少php与mysql数据库通信的延迟可以通过以下策略:1. 优化数据库查询,使用索引提升查询速度;2. 减少数据库连接次数,使用连接池管理连接;3. 查询优化,使用explain分析查询计划;4. 使用缓存,如redis,减少数据库查询次数。这些方法能显著提升应用性能,但需权衡利弊,确保系统稳定性…

    2026年9月24日
    000
  • 讯维解决KVM鼠标不同步

    讯维解决KVM鼠标不同步讯维解决KVM鼠标不同步讯维解决KVM鼠标不同步讯维解决KVM鼠标不同步

    使用网络kvm时,常遇到本地鼠标与远程界面光标位置不一致的问题,即鼠标不同步现象,严重影响操作流畅性。可通过优化鼠标同步设置、更新驱动程序或选用兼容性更强的设备来有效改善。 1、配置运行Windows 2000操作系统的服务器环境 2、调整鼠标相关参数 3、点击开始菜单,进入控制面板,选择“鼠标”进…

    2026年9月24日 用户投稿
    900
  • 对于2K分辨率游戏玩家而言,中端显卡是否已能完全满足未来两三年的需求?

    中端显卡在2025年仍可满足2K游戏需求,关键在于选择12GB以上显存并支持DLSS 4或FSR 3.1技术的型号,如RTX 5060 Ti 16GB、RX 7700 XT或RX 6750 GRE 12GB,配合超分技术可在多数主流游戏中实现高帧率流畅体验。 对于2K分辨率的游戏玩家,中端显卡在20…

    2026年9月24日
    800
  • Java泛型擦除机制对对象类型的影响

    泛型擦除使Java在编译后移除类型信息,导致运行时无法判断具体泛型类型,影响类型检查、反射获取及继承多态,需通过桥接方法等机制保证一致性。 Java的泛型擦除机制在编译期会移除泛型类型信息,导致运行时无法获取具体的泛型参数类型。这一机制直接影响了对象类型的判断、反射操作以及继承中的类型处理。 泛型擦…

    2026年9月24日
    300
  • mac怎么分屏_mac分屏操作方法

    通过快捷键、拖拽或调整比例可高效使用Mac分屏功能。首先点击并按住绿色按钮选择窗口配对,或拖动窗口至屏幕边缘自动进入分屏;随后可调节分割线更改窗口比例;退出时点击顶部绿色按钮即可恢复普通模式。 如果您希望在使用 Mac 时提高多任务处理效率,可以通过分屏功能同时查看和操作两个应用程序。该功能允许用户…

    2026年9月24日
    300
  • 如何分析Linux进程内存 pmap内存映射检查方法

    如何分析Linux进程内存 pmap内存映射检查方法如何分析Linux进程内存 pmap内存映射检查方法如何分析Linux进程内存 pmap内存映射检查方法如何分析Linux进程内存 pmap内存映射检查方法

    要分析linux进程的内存,特别是利用pmap工具,核心操作是获取目标进程pid后执行pmap -x 。1. 获取pid可通过ps aux | grep your_process_name;2. 执行pmap -x 命令查看扩展格式信息,包括address、kbytes、rss、dirty、mode…

    2026年9月24日 用户投稿
    200
  • 如何实现Linux与Windows双系统引导管理?

    答案是先安装Windows再安装Linux,使用GRUB引导;需注意引导模式(UEFI/Legacy)与分区策略(ESP、/、swap、/home),并可通过Live USB修复GRUB。 实现Linux与Windows双系统引导管理,核心在于一个可靠的引导加载器,通常是Linux在安装时提供的GR…

    2026年9月24日
    300
  • 2025年生成漫画图片的AI工具Top10盘点

    2025年生成漫画图片的AI工具Top10盘点2025年生成漫画图片的AI工具Top10盘点2025年生成漫画图片的AI工具Top10盘点2025年生成漫画图片的AI工具Top10盘点

    2025年AI漫画工具已深度融入创作全流程,十大工具各具特色:ComiGenius Pro 3.0强于叙事连贯与情绪表达,MangaFlow AI专精日漫风格,PanelCraft AI优化分镜布局,StorySketcher 2025实现故事可视化,Artisan Studio X支持多风格模拟,…

    2026年9月24日 用户投稿
    600
  • Java Optional.orElse与orElseGet区别

    orElse总是执行默认值计算,而orElseGet仅在Optional为空时调用Supplier获取,默认值构造 costly 时应优先使用orElseGet以避免性能浪费。 在 Java 8 引入的 Optional 类中,orElse 和 orElseGet 都用于在 Optional 值为空…

    2026年9月24日
    000
  • VSCode如何优化多语言混编 VSCode复合工程项目的管理技巧

    #%#$#%@%@%$#%$#%#%#$%@_e2fc++805085e25c9761616c00e065bfe8处理多语言混编和复杂项目的核心策略是使用多根工作区(multi-root workspace),通过创建.code-workspace文件将不同语言或模块的目录统一管理,实现跨项目文件浏…

    2026年9月24日
    000
  • Java中接口常量和类常量的使用区别

    接口常量默认public static final,用于行为契约但易导致职责模糊;类常量可用不同访问修饰符,更适合封装和维护。现代Java推荐使用专用常量类、枚举、私有静态常量或配置文件管理常量,以提升代码清晰度与可维护性。 Java中接口常量和类常量,核心区别在于它们的定义位置和隐式属性。接口常量…

    2026年9月24日
    000
  • AI PC的概念是炒作还是未来趋势?

    AI PC正通过专用芯片、本地化智能和新交互模式重塑个人电脑。专用NPU算力突破50TOPS,使设备可高效运行图像识别、语音分析等AI任务,实现快速安全的本地处理;高通在骁龙X Elite上运行130亿参数大模型,微软Windows 11原生支持本地AI,让文档润色、图像修复等操作可在无网环境下完成…

    2026年9月24日
    200
  • 文字生成图片的AI工具2025十大好用推荐

    2025年热门AI文生图工具包括DALL-E 3、Midjourney、Stable Diffusion XL等,具备高图像质量、快速生成、强语义理解与精细风格控制,适用于不同用户需求,未来趋势指向更高清、更智能、更集成的创作生态。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使…

    2026年9月24日
    200
  • 处理PHP多线程的定时任务并行_优化php多线程怎么实现的定时任务执行

    PHP可通过多进程、消息队列等方式实现定时任务并行处理。1. 使用pthreads扩展(需ZTS支持)可在CLI环境实现多线程,但部署复杂;2. 利用pcntl_fork创建子进程是推荐方案,通过fork多个进程并行执行任务,适合CLI模式;3. 通过crontab同时触发多个独立脚本或使用exec…

    2026年9月24日
    200
  • 怎样处理C++中的野指针问题 空指针检测与防御性编程

    怎样处理C++中的野指针问题 空指针检测与防御性编程怎样处理C++中的野指针问题 空指针检测与防御性编程怎样处理C++中的野指针问题 空指针检测与防御性编程怎样处理C++中的野指针问题 空指针检测与防御性编程

    野指针难以发现是因为其指向已失效或非法内存,解引用会导致未定义行为。1. 初始化是关键防线,声明指针时必须赋初值或设为nullptr;2. 使用智能指针std::unique_ptr和std::shared_ptr可自动管理内存生命周期,避免手动delete遗漏;3. 防御性编程要求每次使用指针前进…

    2026年9月24日 用户投稿
    200
  • 360浏览器怎么关闭网页预加载_360浏览器禁用后台预加载提升性能设置

    关闭360浏览器预加载功能可减少资源占用,依次通过设置中心关闭网页预加载、禁用加速功能、修改隐私与安全设置限制后台行为。 如果您发现360浏览器在后台自动预加载网页,导致系统资源占用较高或网络变慢,可能是由于浏览器的智能预加载功能正在运行。该功能会提前加载您可能访问的网页内容以提升浏览速度,但同时也…

    2026年9月24日
    100

发表回复

登录后才能评论
关注微信