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...