學習Oracle 單行函數:
包括字符函數,數值函數,日期函數,轉換函數,通用函數。
dual是一個”偽表”,可以用來測試函數和表達式。
1, 字符函數
包括大小寫控制函數,字符控制函數。
大小寫控制函數:lower,upper,initcap。
字符控制函數:concat,substr,length,instr,lpad | rpad,trim,replace。
select lower( last_name || first_name) from employees;
select upper( last_name || first_name) from employees;
select initcap(job_id),job_id from employees;
select concat('Hello','World') from dual;
select substr('HelloWorld',1,5) from dual;
select length('HelloWorld') from dual;
select instr('HelloWorld','W') from dual;
select lpad('salary',10,'*') from dual;
select rpad('salary',10,'*') from dual;
select trim('H' from 'HelloWorld') from dual;
select replace('Hello','e','o') from dual;
2, 數字函數
分別有:round — 四舍五入,trunc — 截斷,mod — 求余
select round(85.969,2),round(85.969,0),round(85.969,-1) from dual;
select trunc(85.969,2),trunc(85.969,0),trunc(85.969,-2) from dual;
select last_name,salary,mod(salary,5000) from employees;
3, 日期函數
函數sysdate 返回:日期,時間
日期的數學運算:
(1)在日期上加上或減去一個數字結果仍為日期
(2)兩個日期相減返回日期之間相差的天數(日期不允許做加法運算,無意義)
(3)可以用數字除24來向日期中加上或減去天數。
計算員工入職日期距離系統當前時間相差多少個星期:
select last_name,(sysdate-hire_date)/7 as "周末" from employees;
日期函數:
months_between:兩個日期相差的月數。
add_months:向指定日期中價上若干月數。
next_day:指定日期的下個星期*對應的日期。
last_day: 本月的最后一天。
round: 日期四舍五入。
trunc:日期截斷。
select round( months_between(sysdate,'1-1月-19')) from dual;
select add_months(sysdate,3) from dual;
select next_day(sysdate,'星期五') from dual;
select last_day(sysdate) from dual;
4,轉換函數
數據類型轉換:隱性/顯性
隱性數據類型轉換:
Oracle 自動完成轉換:
Varchar2 or char --> number
Varchar2 or char–> date
Number --> Varchar2
Date --> Varchar2
To_char 函數對日期的轉換
(1)必須包含在單引號中而且大小寫敏感。
(2)可以包含任意的有效的日期格式。
(3)日期之間用逗號隔開。
select last_name,to_char(hire_date,'dd month yyyy') from employees;
To_char 函數對字符的轉換
select to_date('2019年1月29日 10:10:20','yyyy"年"mm"月"dd"日"hh:mi:ss') From dual
to_char函數對數字的轉換
下面是在to_char 函數中經常使用的幾種格式:
9 數字
0 零
$ 美元符
L 本地貨幣符號
. 小數點
, 千位符
To_char函數對數字的轉換
select last_name, to_char(salary,'$999,999,99') "工資" from employees;
5,通用函數
下面這些函數適用于任何數據類型,同時也適用于空值:
nvl(n1,n2)
nvl2(n1,n2,n3)
nullif(n1,n2)
coalesce(n1,n2……,nn)
nvl 函數:
將空值轉換成一個已知的值:
(1)可以使用的數據類型有日期、字符、數字。(2)函數的一般形式:– nvl (commission_pct,0)– nvl (hire_date,'01-7月-97')– nvl (job_id,'No Job Yet')(3)nvl2 (n1, n2,n3) :n1不為NULL,返回n2;為NULL,返回n3。
select last_name,salary,nvl(commission_pct,0),(salary*12)+ (salary*12*nvl(commission_pct,0)) "工資" from employees;
select last_name, salary, commission_pct, nvl2(commission_pct, 'AA', 'YY') from employees where department_id in (50, 80);
nullif (n1,n2) : 相等返回null,不等返回n1。
select first_name, length(first_name) "n1", last_name, length(last_name) "n2", nullif(length(first_name), length(last_name)) "結果" from employees;
coalesce函數
(1)coalesce與nvl相比的優點在于 coalesce可以同時處理交替的多個值。
(2)如果第一個表達式為空,則返回下一個表達式,對其他的參數進行coalesce。
select last_name, coalesce(commission_pct, salary, 10) YY from employees order by commission_pct;
條件表達式
(1)在 SQL 語句中使用if-then-else 邏輯
(2)使用兩種方法:
– case表達式
– decode 函數
select last_name, job_id, salary, case job_id when 'IT_PROG' then 1.10*salary when 'AD_VP' then 1.15*salary when 'AD_PRES' then 1.20*salary else salary end "綜合" from employees;
嵌套函數
(1)單行函數可以嵌套。
(2)嵌套函數的執行順序是由內到外。
F3(F2(F1(col,arg1),arg2),arg3)
select last_name, nvl(to_char(manager_id), 'No') from employees;
本篇的單行函數到這里結束。通過這篇我們應該對單行函數有初始的了解,深入了解還需要勤加練習。