日期:2014-05-16  浏览次数:20509 次

oracle函数相关

1.nvl

?

oracle的nvl函数的用法

通过查询获得某个字段的合计值,如果这个值位null将给出一个预设的默认值 
select nvl(sum(t.dwxhl),1) from tb_jhde t where zydm=-1
这里关心的nvl的用法,nvl(arg,value)代表如果前面的arg的值为null那么返回的值为后面的value 
如: NVL(a,b)就是判断a是否是NULL,如果不是返回a的值,如果是返回b的值 通过查询获得某个字段的合计值,如果这个值位null将给出一个预设的默认值

另一个有关的有用方法 
declare 
i integer 
select nvl(sum(t.dwxhl),1) into i from tb_jhde t where zydm=-1
这样就可以把获得的合计值存储到变量i中,如果查询的值为null就把它的值设置为默认的1

?

2.rownum

?

rownum是oracle预处理字段,默认标序是1,只有记录集已经满足条件后才会进行后续编号。
例如:
select rownum,tb.* from tb where rownum>1

?

3.to_number

?

To_number函数的格式如下:
To_number(varchar2 or char,’format model’)
To_number函数中也有很多预定义的固定格式:
9
代表一个数字
0
强迫0显示
$
显示美元符号
L
强制显示一个当地的货币符号
.
显示一个小数点
,
显示一个千位分隔符号
下面是一些转换的例子:
SQL> select to_number(’RMB234234.4350′,’L999999.0000′) from dual;
TO_NUMBER(’RMB234234.4350′,’L999999.0000′)
——————————————
234234.435
另一个例子是:
SQL> select to_number(’$123,233,455,623.3400′,’$999,999,999,999.0000′) from dual;
TO_NUMBER(’$123,233,455,623.3400′,’$999,999,999,999.0000′)
———————————————————-
1.2323E+11

?

4.to_char

?

?

select to_char(to_date('1983-12-11','YYYY-MM-DD'),'DD') from dual;

select to_char(sysdate,'YYYY/MM/DD') from dual;

?

5.to_date

?

?

select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;  

select to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-02-01','yyyy-mm-dd') from dual;
?

?

6.Trunc

截取函数并不改变数据类型,即date截取以后还是date,char截取以后还是char.

?

?

TRUNC(date,format)
TRUNC(date,''format'')未指定format时,将日期截为12 A.M.,不考虑是否在中午之前的条件。
且使用精确符,如:select trunc(SYSDATE,'dd') from dual;精确到天
以下语句可证明类型不变:
select to_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd') from dual
minus
select trunc(SYSDATE,'dd') from dual;
结果是空的。

TRUNC(for number)
TRUNC函数返回处理后的数值,其工作机制与ROUND函数极为类似,只是该函数不对指定小数前或后的部分做相应舍入选择处理,而统统截去。
其具体的语法格式如下
TRUNC(number[,decimals])
其中:
number 待做截取处理的数值
decimals 指明需保留小数点后面的位数。可选项,忽略它则截去所有的小数部分
下面是该函数的使用情况:
TRUNC(89.985,2)=89.98
TRUNC(89.985)=89
TRUNC(89.985,-1)=80
注意:第二个参数可以为负数,表示为小数点左边指定位数后面的部分截去,即均以0记。

?

?

举例:
对数字,日期进行的 
SQL> select trunc(sysdate) from dual; 
TRUNC(SYSD 
---------- 
07-1月 -03 
SQL> select trunc(sysdate,'mm') from dual; 
TRUNC(SYSD 
---------- 
01-1月 -03 
SQL> select trunc(sysdate,'yy') from dual; 
TRUNC(SYSD 
---------- 
01-1月 -03 
SQL> select trunc(234.5565) from dual; 
TRUNC(234.5565) 
--------------- 
234 
SQL> select trunc(sysdate,'D') from dual; 
TRUNC(SYSD 
---------- 
05-1月 -03 

////////////////////////////////////////////////////////////////////////////

select trunc(sysdate ,'dd') from dual ; -- 2007-9-19

select trunc(sysdate ,'yyyy') from dual ; --2007-1-1

select trunc(sysdate ,'mm') from dual ; --2007-9-1
?

?

?

?

?