乙個菜鳥的oracle之路

2021-12-30 02:32:22 字數 4289 閱讀 2283

乙個菜鳥的oracle之路-----二

查詢語句中使用函式

round(**)用於數字的四捨五入。

案例1  計算金額的四捨五入。

[sql] 

select ename,salary*0.1234567 s1,  

round(salary*0.1234567,2) s2,  

round(salary*0.1234567) s3 from emp_***;  

案例2 數字函式 trunc(**)

trunc()用於擷取,如果沒有第二個引數,預設是0

[sql] 

select ename,salary*0.1234567 s1,  

round(salary*0.1234567,2) s2,  

round(salary*0.1234567) s3,  

trunc(salary*0.1234567,2) s4 from emp_***;  

案例3,日期函式sysdate

獲取系統當前時間

select sysdate from dual;

//虛表dual是oracle用於操作函式的方式,屬於

sys使用者,共享給所以使用者使用,虛表dual是單行

單列的表,表中存放乙個常量資料x

[sql] 

select * from dual;    

虛表的意義,更方便的操作函式或者查詢常量

如下例。表中有多少條資料,常量就會出現多少次

[sql] 

select sysdate from emp_***;    

//感覺查詢結果與真實的有出入

//沒有出入,有幾條資料則顯示幾次常量(當前時間)

案例4   日期資料相減

計算員工入職多少天

//我的錯誤解 select sysdate-hiredate from emp_***;

select ename,hiredate,(sysdate-hiredate)days from emp_***;

日期資料相減,得到兩個日期之間的天數差,不足一天用小數表示,

可以用round函式處理,

select ename, hiredate,round(sysdate-hiredate)days from emp_***;

案例5   日期函式  months_between()**

計算員工入職多少個月,保留有小數

[sql] 

select ename,hiredate,  

months_between(sysdate,hiredate)months from emp_***;    

案例6     不保留小數。入職為整數個月

[sql] 

select ename,hiredate,  

round(months_between(sysdate,hiredate))months from emp_***;    

案例7  計算12個月之前的時間點

[sql] 

select add_months(sysdate,-12)from dual;    

//暫時未發現有add_year等方法 select add_year(sysdate,-5)from dual;

案例8 日期函式 last_day()*

計算本月最後一天

[sql] 

select last_day(sysdate) from dual;    

案例9 轉換函式

轉換函式 to_char(日期資料,格式):把日期轉化為字元資料

把時間資料按照指定格式輸出。

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

案例10 把時間資料按指定格式輸出

[sql] 

select to_char(sysdate,'year month dd day dy') from dual;    

//輸出星期幾的時候 用day 用dy也可以

select to_char(sysdate,'year month dd dy') from dual;

案例11 把時間資料按指定格式輸出

[sql] 

select to_char(sysdate,'yyyy/mm/dd')from dual;  

select to_char(sysdate,'mm/yyyy/dd')from dual;  

select to_char(sysdate,'mm/y/dd')from dual;    

小結:日期格式

1,常用日期格式

yyyy 四位數字年 如:2011

year 全拼的年   如 twenty eleven

month 全頻的月  如 november 或者11月

mm    兩位數字月 如 11

mon   簡拼的月   如nov,中文沒有簡拼

dd    兩位數字日

day   全拼的星期 如 tuesday

dy    簡拼的星期

am    上午/下午 如:am/pm

sqlplus 中的日期預設格式是 dd-mon-rr 日月年。

yy格式是oracle早起的時間表示方式,存在千年蟲問題。

假設現在時間為2023年,05年和98年分別被oracle解釋為

yy       rr

05年    2005     2005

98年    2098     1998

假設現在時間為2023年,05年和98年分別被oracle解釋為

yy       rr

05年    1905     2005

98年    1995     1995

案例12,轉換函式 to_date()**

插入一條資料,標號為1012,姓名為amy,入職時間為當前系統時間

[sql] 

insert into emp_***(empno,ename,hiredate)values(1012,'amy',sysdate);    

案例13  插入一條資料,編號為1012,姓名為amy,入職時間是2023年10月10日

insert into emp_***(empno,ename,hiredate)values(1012,'amy','10-10月-11');

//該時間格式不符合中國常用時間表示格式

案例14   按指定時間格式插入資料

[sql] 

insert into emp_***(empno,ename,hiredate)values(1012,'amy',  

to_date('2019-10-10','yyyy-mm-dd'));               

select * from emp_*** where empno=1012;    

案例15.

按指定格式顯示員工姓名和入職時間 顯示格式為 amy 2011-10-10

[sql] 

select ename,to_char(hiredate,'yyyy-mm-dd')from emp_***;    

小結:to_date()和to_char()是時間處理函式

to_date 將字串資料按指定格式轉化為日期資料

to_char()將日期資料按指定格式轉化為字串資料

案例16.

函式 coalesce() coalesce(引數列表)函式的作用

返回引數列表中第乙個非空引數,引數列表中最後乙個值通常為常量

計算員工的年終獎

要求如下:

如果bonus不是null,發年終獎為bonus

如果bonus是null,發年終獎salary*0.5

如果bonus和salary都是null,發100元安慰一下。

[sql] 

select salary*12+nvl(bonus,0)*12 年薪,ename from emp_***   

select salary*12+nvl(bonus,0)*12 年薪,ename from emp_***    

使用nvl函式得到的結果

[sql] 

select ename ,nvl(bonus,nvl(salary,200)*0.5)年終獎 from emp_***;    

使用coalesce()函式得到的結果

[sql] 

select ename,bonus,salary,coalesce(bonus,salary*0.5,100) bonus from emp_***; 

//coalesce 函式返回引數列表中第乙個非空資料

乙個菜鳥的做題之路 階乘問題

1.cpp 此檔案包含 main 函式。程式執行將在此處開始並結束。include pch.h include include include int main printf d n s printf the time is 6f n double clock clocks per sec retu...

乙個菜鳥程式設計師的自我救贖之路(一)

說了好久的博文,今天要開始了,雖然並沒有什麼可寫,但還是想隨便寫點,算是博文的開山之作吧,隨便扯扯,寫寫自己這段時間的感受。想想自己已畢業兩年,乙個老牌985學校的碩士,乙個從機械行業轉行到計算機行業的普通的不能在普通的碼農,乙個實際是做嵌入式卻每天想著去做演算法的菜鳥,有時候感覺自己現在的 能力真...

乙個菜鳥的oracle匯入dmp檔案過程

首先我對oracle資料庫不太了解,結果領導叫我匯入dmp檔案,網上找了半天資料終於導進去了,過程如下 1 首先oracle版本是11g,登入伺服器發現不知道使用者名稱和密碼,用預設的使用者名稱 sys和密碼sysdba登陸,然後建立新使用者 create user dmp的使用者名稱 identi...