SQL语言(5)
SQL語言(5)
1.數字函數
?Round(arg1,arg2)
四舍五入指定小數的值;
Arg1:數字類型。原數字;
Arg2:整數類型。小數點保留的位數,可以是一個負數,負數則表示指定整數的位置;正數是以小數點為中心向又進行四舍五入,負數正好相反;
?Round(arg1)
四舍五入保留整數;與round(arg1,0)等同;
Arg1:數字類型。原數字;
?Trunc(arg1,arg2)
截斷指定小數的值,不做四舍五入處理;
Arg1:數字類型,原數字;
Arg2:整數類型,小數點保留的位數,可以是一個負數,負數則表示指定整數的位 置;
?Trunc(arg1)
保留整數;與trunc(arg1,0)等同;
Arg1:數字類型,原數字;
?Mod(arg1,arg2)
取余;
Arg1:數字類型。被除數;
Arg2:數字類型。除數;
(以hr用戶中的employees為例)
*
例
1.計算所有是銷售代表(SA_REP)的雇員的工資被5000除后的余數;
Select mod(salary,5000) from employees where job_id = ‘SA_REP’;
2.日期的處理
(1)Sysdate函數
Sysdate是一個日期函數,他返回當前數據庫服務器的日期和時間;
(2)用日期計算
?日期加或者減一個數,結果是一個日期值;
?兩個日期相減得到兩個日期之間的天數;
?用小時數除以24,可以加小時到日期上;
(以hr用戶中的employees為例)
*例:
顯示所有在部門90中的雇員的名字和從業的周數。雇員的總工作時間以周計算;
Select last_name , (sysdate - hire_date)/7 from employees where department_id = 90;
3.日期函數
?Month_between(date1,date2)
計算date1和date2之間的月數。其結果可以是正數也可以是負數。如果date1大 于date2,結果是正,反正結果為負;
Date1:日期類型;
Date2:日期類型;
?Add_months(date1,num)
添加num個日歷月到date。
Num的值必須是整數,但可以是負數。
Date:日期類型;
Num:整數類型;
?Next_day(date,’char’)
計算date之后的下一個周(’char’)的指定的星期。
Char的值可能是一個表示一天的數或者是一個字符串。(Char為星期幾)如果使用 數字表示星期,1 是從星期日開始的。數字范圍1-7(數字不需要加單引號);
Date:日期類型;
Char:數字或字符串;
?Last_day(date)
計算包含date的月的最后一天的日期;
Date:日期類型;
?Round(date,’fmt’)
返回用格式化模式fmt(yy/year/mm/month)四舍五入到指定單位的date,如果格 式模式fmt被忽略,date被四舍五入到最近的天;
Date:日期類型;
Fmt:字符串類型;
?Trunc(date,’fmt’)
返回用格式化模式fmt截斷到指定單位的當天,如果格式模式fmt被忽略,date被 截斷到最近的天;
Date:日期類型;
Fmt:字符串類型;
(以hr用戶中的employees為例)
例:
一、查詢所有受雇在15年(180個月)以內的雇員的ID,入職時間,顯示他們以被雇用的月,從受雇日期開始加6個月的試用期后的日期,受雇日期后第一個星期五是幾號,以及受雇月的最后一天是幾號;
Select employee_id,hire_date,months_between(sysdate,hire_date),add_months(hire_date,6),next_day(hire_date,’金曜日’),last_day(hire_date) from employees where months_between(sysdate,hire_date) < 180;
二、查詢受雇日期,找出2002年開始工作的那些人,用round和trunc函數顯示開始的月份;
Select last_name , round(hire_date,’mm’) , trunc(hire_date,’mm’) from employees where hire_date like ‘02%’;
4.數據類型轉換
?隱式數據類型轉換
當原數據的類型和目標數據類型不同的時候,如果沒有轉換函數,就會發生隱式 轉換,也稱為自動轉換;
隱式轉換的兩大問題:
1.性能影響
隱式轉換的最大問題就是轉換時會導致索引的無效,進而可能導致全表掃描;
2.不便于閱讀:
由于隱式轉換使得數據庫編程人員和DBA難以了解到究竟發生了怎樣的類型 轉換,而且如果代碼很多很長的話,要查出錯誤就需要花很長時間;
?顯示數據類型轉換
1.to_char(arg1,’fmt’)
將一個日期或者數字轉換為字符類型,帶格式化樣式fmt;
Arg1:數字或者日期類型;要求要轉換的數據;
Fmt:轉換的格式;
?to_char日期轉換;
日期格式的模板元素
時間格式模板元素
日期的時間部分,時間元素格式
Hh24:mi:ss am
*
例
*:select to_char(sysdate,’hh24:mi:ss:am’) from dual;
其他格式
指定后綴來影響數字顯示
(以hr用戶中的employees為例)
例
顯示所有雇員的名字和受雇日期,受雇日期以2007年8月10日 12:00:00 AM 顯示;
Select last_name , to_char(hire_date,’yyyy”年”mm”月”dd”日” hh:mi:ss AM’) from employees;
?To_char 數字轉換
數字格式模板
(以hr用戶中的employees為例)
例
查詢雇員Whalen,顯示他的薪水,在薪水前添加美元符號與千位符;
Select last_name,to_char(salary,’fm$999,999,999.00’) from employees where last_name = ‘Whalen’;
總結