代码改变世界

oracle语句—我每天的成长

2013-07-03 11:26  培培@java  阅读(137)  评论(0编辑  收藏  举报

一. trunc
select trunc(sysdate,'day') ss from table                                                                    
在这里的trunc 是取得本周的第一天                                                                             
如果仅仅写trunc(sysydate)不使用参数表示截取到日                                                            
                                                                                                             
给你举个例子:                                                                                               
 select trunc(sysdate,'DD') AA,trunc(sysdate,'MM') BB,trunc(sysdate,'yyyy') CC,trunc(sysdate,'day')from dual;
得到的结果:                                                                                                 
  AA             BB          CC         trunc(sysdate,'day')                                                 
2010-8-11    2010-8-1   2010-1-1  2010-8-8                                                                   
                                                                                                             
AA列得到当天,bb列得到当月第一天,CC列得到当年第一天,trunc(sysdate,'day')列(在查询时没有定义列名)得到本周第一天
二. LTRIM、RTRIM和TRIM在ORACLE中的用法:
1.不使用任何参数:
sec@ora10g> select trim ('    SECOOLER    ') "TRIM e.g." from dual;

TRIM e.g
--------
SECOOLER

这也是最常见的一种使用方法,都使用默认的参数,默认情况下TRIM会同时删除字符串前后出现的空格。

2.其实第一种常用的方法等同于下面带有“BOTH”参数的写法
sec@ora10g> select trim (both from '    SECOOLER    ') "TRIM e.g." from dual;

TRIM e.g
--------
SECOOLER

“BOTH”参数表示同时去除字符串前后所指定的内容(默认情况下删除空格)。

3.既然试用了BOTH参数,我们再看一下“TRAILING”和“LEADING”参数效果
sec@ora10g> select trim (trailing from '    SECOOLER    ') "TRIM e.g." from dual;

TRIM e.g.
------------
    SECOOLER

sec@ora10g> select trim (leading from '    SECOOLER    ') "TRIM e.g." from dual;

TRIM e.g.
------------
SECOOLER

可见,使用“TRAILING”参数可以完成字符串尾部空格的删除功能;而“LEADING”参数正好相反,完成字符串头部空格的删除功能。
也就是说,使用“TRAILING”和“LEADING”参数可以指定空格的删除位置。

4.“trim_character”参数粉墨登场
这个参数改变了“删除空格”的默认行为。
如果想要删除字符串'xxxxSECOOLERxxxx'前后出现的“x”,“trim_character”参数就派上用场了。
sec@ora10g> select trim ('x' from 'xxxxSECOOLERxxxx') "TRIM e.g." from dual;

TRIM e.g
--------
SECOOLER

配合“BOTH”、“TRAILING”和“LEADING”三个参数使用效果如下,与之前演示类似。看结果,不赘述。
sec@ora10g> select trim (both 'x' from 'xxxxSECOOLERxxxx') "TRIM e.g." from dual;

TRIM e.g
--------
SECOOLER

sec@ora10g> select trim (trailing 'x' from 'xxxxSECOOLERxxxx') "TRIM e.g." from dual;

TRIM e.g.
------------
xxxxSECOOLER

sec@ora10g> select trim (leading 'x' from 'xxxxSECOOLERxxxx') "TRIM e.g." from dual;

TRIM e.g.
------------
SECOOLERxxxx

5.需要注意的地方
这里的“trim_character”参数只允许包含一个字符,不支持多字符。
报错信息如下:
sec@ora10g> select trim (leading 'xy' from 'xyxxSECOOLERxyyx') "TRIM e.g." from dual;
select trim (leading 'xy' from 'xyxxSECOOLERxyyx') "TRIM e.g." from dual
       *
ERROR at line 1:
ORA-30001: trim set should have only one character

既然TRIM不能满足我们删除只剩“SECOOLER”字符串的要求,有么有其他手段呢?of course有。我们使用RTRIM和LTRIM“连环拳”完成这个任务。
1)使用RTRIM
sec@ora10g> select rtrim('xyxxSECOOLERxyyx','xy') "e.g." from dual;

e.g.
------------
xyxxSECOOLER

2)使用LTRIM
sec@ora10g> select ltrim('xyxxSECOOLERxyyx','xy') "e.g." from dual;

e.g.
------------
SECOOLERxyyx

3)联合使用RTRIM和LTRIM函数达到我们的目的
sec@ora10g> select ltrim(rtrim('xyxxSECOOLERxyyx','xy'),'xy') "e.g." from dual;

e.g.
--------
SECOOLER

使用RTRIM和LTRIM函数时的注意事项:“xy”不表示整个“xy”字符串进行匹配,而是发现任意的字符“x”或字符“y”均做删除操作。
三.NVL2和NVL
NVL2(expr1,expr2,expr3)

  功能:如果参数表达式expr1值为NULL,则NVL2()函数返回参数表达式expr3的值;如果参数表达式expr1值不为NULL,则NVL2()函数返回参数表达式expr2的值。

NVL( string1, replace_with)

  功能:如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都为NULL ,则返回NULL。
四.DECODE
DECODE(value,if1,then1,if2,then2,if3,then3,...,else),表示如果value等于if1时,DECODE函数的结果返then1,...,如果不等于任何一个if值,则返回else。可以用函数或表达式来替代value,if,then,else从而作出一些更有用的比较。
五.TO_DATE
将现在时间转换成正规时间。
select sysdate,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
将指定的时间格式存给数据库时间。
select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;
六.dbms_metadata

dbms_metadata.get_ddl可以得到数据库的对象的dll脚本。例如:
SELECT dbms_metadata.get_ddl('PACKAGE','XXX') FROM dual

点开...可以得到