Oracle 系統函式

2021-10-10 08:44:38 字數 4787 閱讀 9785

--------------- 日期函式

select  sysdate from dual

----員工入職 年限    日期相減  間隔的天數

select    hiredate,  (sysdate-hiredate)/365, floor((sysdate-hiredate)/365)   from  emp;

---  months_between()  日期間隔的 月數

select  sysdate,months_between(sysdate,hiredate)/12,(sysdate-hiredate)/365 from emp

--- add_months()  

select  add_months('01-12月-2002',-1) from dual;

---- next_day()  表示下乙個日期  (那一天  週幾) [周天 - 週六]--[1-7]

select  next_day(sysdate,1) from dual;

---last_day()  本月的最後一天

select last_day(sysdate) from dual;

----round ()

select round(sysdate,'month') from dual;

----round 預設支援 數字格式   不會自動轉化 日期   和 14 沒關係   

select round(to_date('2000-02-15','yyyy-mm-dd'),'month') from dual;

select round(to_date('2000-02-16','yyyy-mm-dd'),'month') from dual;

---trunc()

select trunc(to_date('2019-11-20','yyyy-mm-dd'),'day') from dual;

--查詢部門是二十號部門,或者名字第三位是o 或者工資大於5000的員工的入職年限

select  floor((sysdate-hiredate)/365) 入職年限,ename,empno from emp where deptno=20 or instr(ename,'o')=3 or sal>5000;

--查詢入職日期大於30 年的,並且獎金不是null,員工姓名和 job  

select ename, job  from  emp where floor((sysdate-hiredate)/365)>35 and comm is not null 

--查詢入職時間加上12年之後大於47年的員工

select  * from  emp where (floor((sysdate-hiredate)/365)+12)>47

-----  轉化函式

------ to_date  將字串  轉成date

select  to_date('2019-11-20','yyyy-mm-dd') from dual;  -- mm  mm  都表示月份

select  to_date('2019-5月-20','yyyy-mon-dd') from dual; --- 5月  mon month

select  to_date('2019-05-20 11:23:13 ','yyyy-mm-dd hh:mi:ss') from dual; --12  小時制

select  to_date('2019-05-20 13:23:13','yyyy-mm-dd hh24:mi:ss') from dual; --24  小時制

select  to_date('2019-05-20 13:23:13','yyyy-mm-dd hh24:mi:ss ') from dual;

--  to_char   date--char

select sysdate from dual;

select   substr(  to_char(sysdate,'yyyy-mm-dd hh-mi-ss'),1,10 )from  dual

select   to_char(sysdate,'yyyy"年"mm"月"dd"日"') from  dual -- 格式中  「」 裡面的內容原樣輸出  不參與轉化

select   to_char(sysdate,'yyyy"year"mm"month"dd"day"') from  dual

select   to_char(sysdate,'yyyy"year"mm"month"dd"day"   ddspth   dd') from  dual

---2月份入職的人 ?

select * from emp where to_char(hiredate,'mm')='02';

---to_char   number--char

select  to_char(123.00 ,'999.999')  from  dual   ---9 格式  數值不夠  補空格  小數點後 補 0

select to_char(-123.00,'000,000.000')from  dual   --  -0格式  數值不夠 補0  小數點後 補 0

--  to_char   數字 轉字串  每個預設加有 乙個空格 

select to_char(123.00,'999.999')  from  dual  where trim(to_char(123.00,'999.999'))= ' 123.000' 

---員工工資

select to_char(123.00,'l99,999.000')from  emp 

select to_char(123.00,'$99,999.000')from  emp 

---- to_number   將字串 轉成 數字

select   to_number('123.66'  ,'000,000.000') from  dual; 

select   to_number('123.66'  ,'999,999.999') from  dual;

----通用函式

----- nvl  (1,2)  表示式1 為空  則返回表示式2  否則 返回表示式1

---總工資

select  sal+comm 總工資    from emp;

select  sal+nvl(comm,0) 總工資    from emp;

select   nvl(null,10) from dual;

select   nvl('1','10') from dual;

----- nvl2  (1,2,3)  表示式1 為空 返回表示式 3  否則是 2

select  nvl2(comm,'不為空','為空') from emp

select  nvl2(comm,sal+comm,sal) from emp

---nullif 判斷兩個值是否相等   相等 返回 空    如果不相等  返回表示式1 資料型別 得一致

select  nullif('123','1231') ,nullif('1','2'),nullif('',null)    from dual;

-- coalesce  返回第乙個不為空的值 

select  coalesce(1,2,3,3),coalesce(null,0,1) from dual;

-----   if  else  ---  

case    表示式

when  值1   then 

when  值1   then   

else 

end  

------  等值判定

select  case 4  

when  1  then '壹'

when  2  then '貳'  

when  3  then '叄'

else  '瞎寫'

end 困  from dual;

select *from emp    

---  clerk  辦事員   salesman  銷售     manager 經理   analyst 分析師   president 董事長

select  ename,

case  job

when 'clerk' then  '辦事員' 

when 'salesman' then  '銷售' 

when 'manager' then  '經理' 

when 'analyst' then  '分析師' 

when 'president' then  '董事長' 

end  具體工作,hiredate

from emp;       

---- 不等值

select   case   

when  sal<1000  then '屌絲'

when  sal<2000  then '窮鬼'  

when  sal<3000  then '小康'

else  '刷禮物'

end 困  from emp;

------   工資   >2000*0.8     >3000 0.7    其他  不扣   實際月薪(稅後  包含獎金)

-----   decode(表示式  , 值1 , 返回值1 ,值2 , 返回值2 .。。,返回值n(預設返回值) ) --只能做等值

select *from emp    ---10  財務部  20 銷售部  30 技術部

select   emp.*  , decode(deptno,10,'財務部',20,'銷售部',30,'技術部') from emp

select   emp.*  , decode(deptno,10,'財務部',20,'銷售部','沒人管') from emp

ORACLE系統函式

1 資料定義語言觸發器 當建立 修改或刪除資料庫模式中的物件時,會激發資料定義語言觸發器。它們可以用來控制或監控ddl語句。表10 1列出了使用ddl觸發器的資料定義事件。這些觸發器都支援before和after事件觸發器,並在資料庫或模式級執行。通常,ddl觸發器用於監控資料庫中的重要事件。有時用...

Oracle系統函式

常用的系統函式總結如下 一 數字類 1.絕對值函式 abs n 2.向上取整函式 ceil n 3.向下取整函式 floor n 4.四捨五入函式 round n,m 注 四捨五入運算,如果m預設則四捨五入到整數字,m 0,四捨五入到小數點的前m位,m 0四捨五入到小數點的後m位 5.擷取數字函式 ...

ORACLE 常用系統函式

1.字元類 1.1 ascii c 函式 和chr i ascii 返回乙個字元的ascii碼,其中c表示乙個字元 chr 返回ascii碼值i 所對應的字元 如 select ascii a ascii a chr 65 chr 97 chr 98 from dual 執行結果為 97,65 a,...