1.decode用法,等同於case
decode(條件,值1,返回值1,值2,返回值2,...省缺值) 相當於判斷if
decode取較小值
select decode(sign(變數1-變數2),-1,變數1,變數2) from dual;
sign()根據0,正數,負數返回0,1,-1
2.字串連線 || 或 concat
3.row_number,rank,dense_rank和over的使用區別
select row_number() over(order by price) as rowid,* from a; 序列依次遞增123456..
select row_number() over(partition by 分組字段 order by price) as rowid,* from a; 序列按組依次遞增1234123
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
Oracle常用函式
一 row number over 資料甲 1 select column name column name,data type,2 row number over partition by column name order by column name row num 3 from test c...
Oracle常用函式
數學函式 1.絕對值 o select abs 1 value from dual 2.取整 大 o select ceil 1.001 value from dual 3.取整 小 o select floor 1.001 value from dual 4.取整 擷取 o select trun...
oracle常用函式
1.concat c1,c2均為字串,函式將c2連線到c1的後面,如果c1為null,將返回c2.如果c2為null,則返回c1,如果c1 c2都為null,則返回null。他和操作符 返回的結果相同 select concat slobo svoboda username from dualuse...