Oracle经常使用函数

1.decode用法,等同于casesql

decode(条件,值1,返回值1,值2,返回值2,...省缺值) 至关于判断iforacle

decode取较小值函数

Select decode(sign(变量1-变量2),-1,变量1,变量2) from dual;code

sign()根据0,正数,负数返回0,1,-1排序

 

2.字符串链接 || 或 concat字符串

 

3.row_number,rank,dense_rank和over的使用区别it

select row_number() over(order by price) as rowid,* from a; 序列依次递增123456..io

select row_number() over(partition by 分组字段 order by price) as rowid,* from a; 序列按组依次递增1234123table

select rank() over(partition by 分组字段 order by price) as rowid,* from a; 同组排序相同为同一序列,下一个跳过同序列个数。12241224变量

select dense_rank() over(partition by 分组字段 order by price) as rowid,* from a; 序列按组有相同序列,依次递增。12231223

 

4.返回非空函数,参数个数不一样

COALESCE(参数1,[..参数n])返回第一个非空表达式,若是都是空值,返回一个空值。至关于case判断,知足非空返回结果,中止判断。oracle9i版本后开始使用。

NVL(表达式1,表达式2)从两个表达式返回一个非空值。若是都是null则返回一个空值null。目的将空值换实际值。表达式1和2必须同一个类型。

NVL2(表达式1,表达式2,表达式3)表达式1为空返回表达式3,不然返回2.

 

5.trim(),ltrim(),rtrim()区别

trim()去除字符串两边的空格

ltrim()去除字符串左边的空格

rtrim()去除字符串右边的空格

 

6.TO_CHAR(),TO_NUMBER(),TO_DATE常见用法

(1)TO_CHAR()格式化数值,

FM9999990.009表示小数点左边最多7位,最少1为为0。小数点右边最少2位,最多3位,且第四位四舍五入。

select 0.12345 a0,to_char(0.12345) a1,

to_char(0.12345,’FM9999990.009’) a2,to_char(0.1236,’FM9999990.009’) a3 from dual;

 

(2)24小时显示用hh24。不加为12,超过12报错。

 select sysdate,to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’),

,to_date(’2012-03-21 18:56:12’,’yyyy-mm-dd hh24:mi:ss’) from dual;

 

(3)TO_NUMBER()将char或varchar变成数值类型

格式范围内能够转换,反之报错

select to_number(‘123.123’,’9999.999’) from dual;能够

 select to_number(‘123.123’,’9999.99’) from dual;报错

 

7.EXECUTE IMMEDIATE存储过程当中使用

(1)直接执行语句

EXECUTE IMMEDIATE ‘truncate table a’ ;

(2)执行参数语句

v_sql :=‘select count(1) from a’ ; EXECUTE IMMEDIATE v_sql;

(3)执行参数语句并复值给某个变量

EXECUTE IMMEDIATE v_sql into v_num;

(4)带参数sql

v_sql :=‘select * from a where a.t1= :1 and a.t2= :2 ’; 

EXECUTE IMMEDIATE v_sql using 值1,值2;

 

 

 8.行转列 适合10g以前

select x1,x2,

   sum(decode(rn,1,值y)) 值y1,

   sum(decode(rn,2,值2))值y2,

from(

select x1,x2,date,值1,

rank() over (partition by x1,x2 order by a.date desc) rn

from a where ..group by x1,x2

)

oracle 11g后行转列能够函数pivot()行转列,unpivot列转行

pivot(聚合函数 for 列名 in(类型) ),  in(‘’)能够是指定列别名,也能够是

子查询。例如(select distinct 列名 from a)

select * from (

select x1,x2,值1行转列的值,

rank() over (partition by x1,x2 order by a.date desc) rn

from a where ..)b

pivot (sum(值1) for rn in( 1 别名1,  2别名2))

结果为x1,x2,别名,别名2

相关文章
相关标签/搜索