oracle基礎總結(四)

2021-08-31 09:08:18 字數 4663 閱讀 4779

顯式轉換

to_char(date,

』format

』):按照指定的格式format把數字或日期型別的資料轉換成字串

格式:

必須包含在單引號中而且大小寫敏感

可以包含任意的有效的日期格式

日期之間用逗號隔開

日期格式如下:

yyyy

2004

year

two thousand and four mm

02month

july

monjul dy

monday

monday dd

02//把當前日期轉換成yyyy/mm/dd

的格式

sql> select to_char(current_timestamp,'yyyy/mm/dd') from dual;

//

把當前日期轉換成yyyy/mm/dd hh24/mi/ss am

的格式

sql> select to_char(current_timestamp,'yyyy/mm/dd hh24/mi/ss am') from dual;

//dd 「of

」month

sql> select to_char(current_timestamp,'yyyy dd "of" month  hh/mi/ss am') from dual;

//

把當數字按照$99,999

這種方式返回字串

並且運算元的位數不能夠大於5(

即$

後邊的位數)

位,

否則話結果會是########

sql> select to_char(11111,'$99,999') from dual;

to_number(char);把包含了數字格式的字串轉換成數字資料

to_date(string,

』format

』);按照指定格式的format把字串轉換成日期資料,如果省略了foramt格式,那麼就採用預設的日期格式(dd-mon-yy);

//

把當前字串轉換成日期

sql> select to_date('2011-02-08','yyyy-mm-dd') from dual;

//求出兩個日期之間相差的天數

sql>select to_date('2011-07-15','yyyy-mm-dd')-to_date

('2011-02-08','yyyy-mm-dd') from dual;

//求出兩個日期之間相差的周次

sql>select (to_date('2011-07-15','yyyy-mm-dd')

-to_date('2011-02-08','yyyy-mm-dd'))/7 from dual;

//對周次進行向上取整

sql>select ceil((to_date('2011-07-15','yyyy-mm-dd')

-to_date('2011-02-08','yyyy-mm-dd'))/7) from dual;

chartorowid(char);把字串轉換成rowid型別

rowidtochar(x);把rowid型別轉換成字元型別資料 一、

通用函式:

這些函式適用於任何資料型別,同時也適用於空值

nvl (expr1, expr2)

nvl2 (expr1, expr2, expr3)

nullif (expr1, expr2)

coalesce (expr1, expr2, ..., exprn)

nvl()將空值轉換成乙個已知的值

可以使用的資料型別有日期、字元、數字。

函式的一般形式:

nvl(commission_pct,0)

nvl(hire_date,'01-jan-97')

nvl(job_id,'no job yet')

//將comm為null替換成0

sql> select empno,ename,job,mgr,hiredate,sal,nvl(comm,0),deptno from  emp;

//在上面的基礎上將日期為空替換成給定的日期

sql>select empno,ename,job,mgr,nvl(hiredate,to_date('2011-1-10','yyyy-mm-dd')),sal,nvl(comm,0),deptno from  emp;

//在上面的基礎上將job為空替換成redarmy

sql> select empno,ename,nvl(job,'redarmy'),mgr,nvl(hiredate,to_date('2011-1-10','yyyy-mm-dd')),sal,nvl(comm,0),deptno from  emp;

//計算出員工在該月的工資=(薪資+獎金)

sql> select empno,ename,job,mgr,hiredate,(nvl(sal,0)+nvl(comm,0)) as "工資",deptno from  emp;

nvl2 (expr1, expr2, expr3) : expr1不為null,返回expr2;為null,返回expr3。

相當於:expr1!=null?exrp2:expr3;

//計算員工的工資

sql> select empno,ename,job,mgr,hiredate,nvl2(comm,sal+comm,sal) as "工資",deptno from  emp;

nullif (expr1, expr2) :  相等返回null,不等返回expr1

//注意觀察理解

sql> select ename as "expr1",job as "expr2",nullif(length(ename),length(job)) from  emp;

lcoalesce 與nvl 相比的優點在於coalesce 可以同時處理交替的多個值。 l

如果第乙個表示式為空,則返回下乙個表示式,對其他的引數進行coalesce 。

sql> select empno,ename,job,mgr,hiredate,coalesce(comm,sal,10000) as "salll", deptno from  emp;

l重點理解:單行函式可以巢狀。巢狀函式的執行順序是由內到外。

條件表示式 :if-then-else 邏輯

case expr when comparison_expr1 then return_expr1

[whencomparison_expr2 thenreturn_expr2

whencomparison_exprn thenreturn_exprn

else else_expr]

end

decode(col|expression, search1, result1

[, search2, result2,...,]

[, default])

//為職位是manager的員工發放5000元的獎金

sql> select ename,job,case job when 'manager' then nvl(sal,0)+5000  end  as "工資" from emp;

//員工的工資

sql> select ename ,job,

2  case job when 'manager' then nvl(sal,0)+5000+nvl(comm,0)

3  else nvl(sal,0)+nvl(comm,0)

4  end

5  from emp;

//改寫成decode的寫法

sql> select ename,job

2 ,decode(job,'manager', nvl(sal,0)+5000+nvl(comm,0),

3  'clerk',nvl(sal,0)+nvl(comm,0)+200,

4  nvl(sal,0)+nvl(comm,0)) as "工資"

5  from emp;

Oracle常識基礎 四

動態sql oracle中的動態sql可以通過本地動態sql命令執行,也可以通過dbms sql程式包來執行。語法 execute immediate 動態sql語句字串 using 繫結輸入引數變數 引數值 錯誤處理 預定義異常 pl sql支援的預定義異常 異常 說明 access into n...

oracle基礎 四 函式

1.使用特定格式插入日期值 使用to date函式 思考 如何插入列帶有日期的表,並按照年 月 日的格式插入?insert into emp values 9998,小紅 manager 7782,1988 11 11 78.9,55.33,10 上面的日期寫入不對,正確的方式如下 insert i...

ORACLE 基礎語句總結

例 alter table tablename add kssj varchar 8 例 alter table tablename drop column hahaha 例 comment on column tablename.欄位 is 注釋 create table 表名 欄位 grbh v...