Oracle常用函式

2022-07-29 07:00:15 字數 2611 閱讀 8839

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...