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

相關文章
相關標籤/搜索