登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

飞哥的技术博客

世上无难事,只怕有心人!

 
 
 

日志

 
 
 
 

ORACLE函数介绍第一篇 著名函数之单值函数 - 无名扫把 - CSDN博客  

2009-05-25 16:53:07|  分类: Oracle |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 ORACLE函数介绍第一篇 著名函数之单值函数收藏

数值型函数输入数字型参数并返回数值型的值。多数该类函数的返回值支持38位小数点,诸如:COS, COSH, EXP, LN, LOG, SIN, SINH, SQRT, TAN, and TANH 支持36位小数点。ACOS, ASIN, ATAN, and ATAN2支持30位小数点。

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;

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;

例如:SELECT LPAD('WhaT is tHis',5),LPAD('WhaT is tHis',25),LPAD('WhaT is tHis',25,'-') FROM DUAL;

4、RPAD(c1,n[,c2]) 返回指定长度=n的字符串,基本与上同,不过补充字符是从右向左方向正好与上相反;

例如:SELECTRPAD('WhaT is tHis',5),RPAD('WhaT is tHis',25),RPAD('WhaT is tHis',25,'-') FROM DUAL;

5、TRIM([[LEADING||TRAILING||BOTH] c2 FROM] c1)  哈哈,被俺无敌的形容方式搞晕头了吧,这个地方还是看图更明了一些。

例如:SELECTTRIM('   WhaT is tHis   ') FROM DUAL;

例如:SELECTTRIM('W'FROM'WhaT is tHis w W') FROM DUAL;

例如:SELECTTRIM(leading 'W'FROM'WhaT is tHis w W') FROM DUAL;

例如:SELECTTRIM(trailing 'W'FROM'WhaT is tHis w W') FROM DUAL;

例如:SELECTTRIM(both 'W'FROM'WhaT is tHis w W') FROM DUAL;

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

例如:SELECT LTRIM('WWhhhhhaT is tHis w W','Wh') FROM DUAL;

例如:SELECT RTRIM('WWhhhhhaT is tHis w W','W w') FROM DUAL;

8、REPLACE(c1,c2[,c3]) 将c1字符串中的c2替换为c3,如果c3为空,则从c1中删除所有c2。

例如:SELECTREPLACE('WWhhhhhaT is tHis w W','W','-') FROM DUAL;

9、SOUNDEX(c) 神奇的函数啊,该函数返回字符串参数的语音表示形式,对于比较一些读音相同,但是拼写不同的单词非常有用。计算语音的算法如下:

例如:SELECT SOUNDEX('dog'),soundex('boy') FROM DUAL;

10、SUBSTR(c1,n1[,n2]) 截取指定长度的字符串。稍不注意就可能充满了陷阱的函数。

例如:SELECT SUBSTR('What is this',5,3) FROM DUAL;

例如:SELECT SUBSTR('What is this',-5,3) FROM DUAL;

例如:SELECT SUBSTR('What is this',50,3) FROM DUAL;

11、TRANSLATE(c1,c2,c3) 就功能而言,此函数与replace有些相似。但需要注意的一点是,translate是绝对匹配替换,这点与replace函数具有非常大区别。什么是绝对匹配替换呢?简单的说,是将字符串c1中按一定的格式c2替换为c3。如果文字形容仍然无法理解,我们通过几具实例来说明:

SELECT TRANSLATE('What is this','','-')FROMDUAL;

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则像是过滤。

1、

l n1:查询起始位置,正值表示从左到右,负值表示从右到左 (大小表示位置,比如3表示左面第3处开始,-3表示右面第3处开始)。黑黑,如果为0的话,则返回的也是0

例如:SELECT INSTR('abcdefg','e',-3) FROM DUAL;

例如:SELECT LENGTH('A123中') FROM DUAL;

例如:SELECT ADD_MONTHS(sysdate,12),ADD_MONTHS(sysdate,-12) FROM DUAL;

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中毫秒四舍五入后的返回,虽然没有找到文档支持,但是想来应该八九不离十。同时,仅是某些情况下会有一秒的误差,一般情况下并不会对你的操作造成影响,所以了解即可。

例如:SELECTSYSDATE,CURRENT_DATE FROM DUAL;

例如:SELECT last_day(SYSDATE) FROM DUAL;

5、NEXT_DAY(d,n) 返回指定日期后第一个n的日期,n为一周中的某一天。但是,需要注意的是n如果为字符的话,它的星期形式需要与当前session默认时区中的星期形式相同。

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))

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

例如:SELECT ROUND(SYSDATE,'HH24') FROM DUAL;

例如:SELECT TRUNC(SYSDATE,'HH24') FROM DUAL;

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

例如:SELECT TO_CHAR('AABBCC') FROM DUAL;

l 转换时间->字符TO_CHAR(d[,fmt]):将指定的时间(data,timestamp,timestamp with;

例如:SELECT TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss') FROM DUAL;

例如: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;

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;

1、DECODE(exp,s1,r1,s2,r2..s,r[,def]) 可以把它理解成一个增强型的if else,只不过它并不通过多行语句,而是在一个函数内实现if else的功能。

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

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

2、

例如:SELECT GREATEST(15,5,75,8) "Greatest" FROM DUAL;

例如:SELECT LEAST(15,5,75,8) LEAST FROM DUAL;

例如: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 子句共同使用。

insertinto tmp3 values ('','a001');

insertinto tmp3 values ('','b001');

insertinto tmp3 values ('a001','a002');

insertinto tmp3 values ('a002','a004');

insertinto tmp3 values ('a001','a003');

insertinto tmp3 values ('a003','a005');

insertinto tmp3 values ('a005','a008');

insertinto tmp3 values ('b001','b003');

insertinto tmp3 values ('b003','b005');

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

connectbyprior nodecol =rootcol;

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

例如:SELECT SYS_CONTEXT('USERENV', 'SESSION_USER') FROM DUAL;

ORACLE函数介绍第一篇 著名函数之单值函数 - 无名扫把 - CSDN博客 - yangzhongfei - 中飞博客



引文来源  ORACLE函数介绍第一篇 著名函数之单值函数 - 无名扫把 - CSDN博客
  评论这张
 
阅读(353)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018