顯式轉換
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...