oralce常用函数

1over()不能函数不能单独使用,需要和分析函数:rank()、sum()、dense_rank()、row_number()等一起使用。
参数:over(partition by columnname1 order by columnname2)
含义:按columnname1指定的字段进行分组排序,或者说按字段columnname1的值进行分组排序。

虽然这里有分组的字眼,但是它不会像group by一样,将相同的字段变成一条字段。换句话说,这里的分组,只是将相同的字段的记录聚集在一起,
而没有减少记录。要这些记录呈现出一种怎样的状态,就看前面使用的什么分析函数了。

举例:
logtime               createnum
2015-03-09-00            3
2015-03-09-01            1
2015-03-09-02            4
2015-03-09-03            2
2015-03-09-04            7

select logtime,sum(createnum) over(partition by to_char(to_date(logtime,'yyyy-mm-dd24'),'yyyy-mm-dd') order by logtime) as total_create
from  t_test_createrole order by logtime

执行后:
logtime               createnum
2015-03-09-00            3
2015-03-09-01            4
2015-03-09-02            8
2015-03-09-03            10
2015-03-09-04            17


2row_number()和over()分组函数一起使用。返回一个虚拟的行值。和rownum属性差不多,都是返回一个虚拟的行值。
但是rownum如果和排序order by关键字处于同一级别的查询当中,它是先产生虚拟的行值然后再排序的。而row_number是在over函数参数的order by进行排序之后才产生的虚拟列。


3decode(x,y,value1,value2)
含义:如果x等于y,则值为value1;如果不等于则值为value2。


4nvl(x,y)
含义:如果x为null,则取y的值;否则,就为x的值。


5to_date('2015-03-09','yyyy-mm-dd')
含义:把字符串'2015-03-09'变成'yyyy-mm-dd'格式的日期类型
格式类型:yyyy-mm-dd hh24   yyyy-mm-dd hh24:mi    yyyy-mm-dd hh24:mi:ss

6to_char(logtime,'mi')
含义:将logtime日期的分钟部分截取出来

7trunc(value,format)
含义:这个函数是截取单词(truncate)的缩写,因此很容易让人误解是上面(6)的那种模式。

1、将日期截取到日、时、分
        语句                                         结果                               注释
select sysdate from dual;                      2015-03-09 16:24:19                  返回当前系统日期
select trunc(sysdate,'mi') from dual;          2015-03-09 16:24:00                  返回的日期截止到分钟
select trunc(sysdate,'hh') from dual;          2015-03-09 16:00:00                  返回的日期截止到小时
select trunc(sysdate,'dd') from dual;          2015-03-09 00:00:00                  返回的日期截止到日

2、取回当前年、月、周的第一天
       语句                                         结果                               注释
select trunc(sysdate,'d') from dual;           2015-03-08 00:00:00                  返回当前这个星期第一天的日期(周天)
select trunc(sysdate,'mm') from dual;          2015-03-01 00:00:00                  返回当前这个月第一天的日期
select trunc(sysdate,'yy') from dual;          2015-01-01 00:00:00                  返回当年第一天的日期

3、截取数字(纯粹的截取,不会进行逻辑分析,即不会进行四舍五入)
       语句                                         结果                               
select trunc(123.456) from dual;                    123
select trunc(123.456,0) from dual;                  123
select trunc(123.456,1) from dual;                  123.4
select trunc(123.456,-1) from dual;                 120
select trunc(123.456,3) from dual;                   0
select trunc(123.456,4) from dual;                   0

8round(number,digital)
含义:对浮点型数number保留digital小数位并进行四舍五入


 

posted on 2015-03-09 16:46  飞机说之代码也疯狂  阅读(162)  评论(0编辑  收藏  举报