Oracle 單行函式

2021-09-11 20:57:55 字數 4498 閱讀 5092

包括字元函式,數值函式,日期函式,轉換函式,通用函式。

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('2023年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;

本篇的單行函式到這裡結束。通過這篇我們應該對單行函式有初始的了解,深入了解還需要勤加練習。

oracle單行函式

1.字元函式 upper 全大寫 lower 全小寫 initcap 首字母大寫 length 取長度 substr 擷取字串 replace 替換 2.數值函式 round 四捨五入 trunc 擷取 mod 取餘 3.日期函式 當前日期 sysdate 日期 數字 日期 日期 數字 日期 日期 ...

oracle單行函式

單行函式 函式類別 單行 返回單個結果 substr,length 多行 返回多個結果,any,all 單行的分類 字元類,日期類,數字類,轉換類,通用類 1.字元類 轉換大小寫 lower 轉換為小寫 select ename,lower ename from emp upper 轉換為大寫 se...

Oracle單行函式

單行函式 運算元據物件,接受引數返回乙個結果,只對一行進行變換,每行返回乙個結果,可以轉換資料型別,可以巢狀,引數可以是一列或乙個值 一 字元函式 concat 字串連線,相當於 initcap 將引數的第乙個字母變為大寫 lower 將引數轉換為全部小寫字母 upper 將引數轉換為全部大寫字母 ...