Oracle 常用函式

2021-09-12 04:27:29 字數 4204 閱讀 1351

lower函式:

此函式將全部的大寫字母都可以變為小寫字母

select lower('abcde') from dual ;

• dual表為乙個虛擬表,以後介紹

upper函式:將輸入的字串變為大寫字母

select upper('abcd') from dual ;

例如:之前查詢的時候區分大小寫,所以此處如果輸入的是小寫字母,就可以通過upper函式進行轉換。

查詢雇員姓名內容為smith的全部員工。

select * from emp where ename=upper('smith') ;

initcap函式:將每個字串的首字母大寫

例如:要求將雇員表中的全部雇員資訊的首字母大寫。

select initcap(lower(ename)) from emp ;

函式可以進行巢狀。

concat函式:字串連線 ,可以連線兩個字串

select concat('hello',' world!!!') from dual ;

使用「||」也可以完成兩個字串的連線操作。

substr函式:字串擷取

擷取的時候需要注意:要從那裡開始擷取,之後取多長的長度。

select substr('hello',1,2) from dual ;

注意:substr函式的開始點是從1開始的。

length:取出字串的長度,例如,取出每乙個雇員的姓名的長度:

select ename||' 姓名的長度為:'||length(ename) from emp ;

instr函式:查詢在乙個字串中是否有指定的字串,如果有,則返回其位置

select instr('hello','x') from dual ;

• 如果有此字串,則返回位置,如果沒有,則返回0。

replace函式:替換 ,可以將乙個字串中的指定字串替換為其他內容:

select replace('hello','l','x') from dual ;

trim函式 :去掉左右空格的函式

select trim('        hello          ') from dual ;

查詢:1、 檢索姓名最後乙個字母為n的雇員

• select * from emp where substr(ename,-1,1)='n';

2、 檢索職務為「sale」的全部員工資訊

• select * from emp where substr(job,1,4)='sale';

round表示四捨五入

•select round(34.56,-1) from dual ;

trunc函式:表示擷取函式

• select trunc(34.56,-2) from dual ;

mod函式:取餘數

•select mod(10,3) from dual ;

取得當前日期:

在oracle中可以通過查詢sysdate取得當前的日期:

• select sysdate from dual ;

例如:計算10部門中的員工進入公司的日期數:

肯定使用當前日期-僱傭日期(hiredate) = 天數,天數/7為日期數。

select ename,round((sysdate-hiredate)/7) from emp ;

例如:求出所有員工的受僱月數:months_between,使用當前日期與僱傭日期比較。

• select ename,round(months_between(sysdate,hiredate)) from emp ;

add_months:表示在日期的基礎上增加幾個月之後的日期:

求出,三個月之後的日期是那一天:

select add_months(sysdate,3) from dual ;

next_day:表示下乙個這天(星期幾)

select next_day(sysdate,'星期一') from dual ;

last_day:求出當前日期所在月的最後一天:

select last_day(sysdate) from dual ;

例如:顯示受僱時間不滿320-個月的雇員的編號、受僱日期、受僱的月數、滿六個月的複審日期、受僱後的第乙個星期五以及受僱當月的最後一天

求出僱傭月數大於320的雇員資訊:

select * from emp where months_between(sysdate,hiredate)>320 ;

綜合:select empno 雇員編號,hiredate 僱傭日期,

round(months_between(sysdate,hiredate)) 僱傭月數 ,

add_months(hiredate,6) 複審日期,next_day(hiredate,'星期五') 受僱後到第乙個星期五,

last_day(hiredate) 最後一天

from emp where months_between(sysdate,hiredate)>320 ;

例如:現在要求取出全部員工受僱的年份

實際上要對hiredate中的內容進行分離,取出年份。

select empno,ename,to_char(hiredate,'yyyy') from emp ;

取出僱傭的月份和日:

select empno,ename,to_char(hiredate,'yyyy') 年,

to_char(hiredate,'mm') 月,to_char(hiredate,'dd') 月 from emp ;

也可以通過此函式把顯示的日期的格式進行修正:

年-月-日:2008-4-7

select empno,ename,to_char(hiredate,'yyyy-mm-dd')  from emp ;

正常情況下的日期,如果是月應該是兩位,如果現在是2月,則會顯示02月,如果現在不希望顯示出前導0,則可以加入乙個fm

select empno,ename,to_char(hiredate,'fmyyyy-mm-dd')  from emp ;

可以將乙個數值按照指定的格式輸出。

select empno,sal from emp ; 此時不是很明確的知道查詢出的工資,而且工資的位數也不標準。

使用to_char完成:select empno,to_char(sal,'l99,999') from emp ;

to_date函式 :

可以將乙個字串變為乙個日期型別。

select to_date('2007-4-7','yyyy-mm-dd') from dual ;

要求:查詢出全部雇員的年薪(基本工資和佣金)。

select empno,(sal+comm)*12 from emp ;

如果沒有獎金的雇員,則年薪也沒了,因為是null值,所以最後的計算結果仍然是null。

希望如果最後的值為null,則應該按0進行計算,此時就需要nvl函式的支援。

nvl函式可以將空值變為乙個特定的數值

select empno,sal,nvl(comm,0) from emp ;

使用此函式修改上面的查詢:

select empno,(sal+nvl(comm,0))*12 from emp ;

select empno,ename,job from emp ;

decode()

希望:• 如果工作是clerk:則顯示辦事員

• 如果工作是salesman:則顯示為銷售人員

• 如果工作是manager,則顯示為經理

select empno,ename,decode (job,'clerk','辦事員','salesman','銷售人員','manager','經理') from emp ;

lpad (string a,int length,string addstring

): 左邊補引數, 把addstring新增到a的左邊,length 是返回值的長度。

select lpad(tc_email_models_seq.nextval,5,'0') from dual

左邊不足5位時,補0

. 顯示為00021

select lpad ('test',8,0) from dual;

result:0000test

獲得本月第一天的時間:select trunc(add_months(sysdate,0), 'month') from dual

Oracle常用函式

一 row number over 資料甲 1 select column name column name,data type,2 row number over partition by column name order by column name row num 3 from test c...

Oracle常用函式

數學函式 1.絕對值 o select abs 1 value from dual 2.取整 大 o select ceil 1.001 value from dual 3.取整 小 o select floor 1.001 value from dual 4.取整 擷取 o select trun...

oracle常用函式

1.concat c1,c2均為字串,函式將c2連線到c1的後面,如果c1為null,將返回c2.如果c2為null,則返回c1,如果c1 c2都為null,則返回null。他和操作符 返回的結果相同 select concat slobo svoboda username from dualuse...