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