乙個菜鳥的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...