1. 程式人生 > >數據庫函數

數據庫函數

性能測試

---函數。

select * from emp;

--initcap首字母大寫。

--replace(ename,'a','_') 將ename 中的所有a 替換成‘_’

--substr(ename,0,3)查詢ename 中前三個字符。

--SUBSTR(ename,3)截取ename中第三個以後得字符。

--SUBSTR(ename,length(ename)-2)最後三個字符。

select upper(ename), lower(ename), initcap(ename), replace(ename,'a','_'),substr(ename,0,3),SUBSTR(ename,3) from emp;

--返回ascll碼 。 cha將ascll碼轉為字符。

select ascll('L') from dual;

--ltrim(ename)去掉左邊空格,rtrim() 去掉右邊空格,trim()去掉左右兩邊空格。

select trim(ename) from emp;

--LPAD('MLDN' , 10 , '*') 字符串左邊填充, rpad 是右邊填充。

select lpad(ename,20,'*') from emp;


SELECT LPAD('MLDN' , 10 , '*') LPAD函數使用 , RPAD('MLDN' , 10 , '*') RPAD函數使用 ,

LPAD(RPAD('MLDN' , 10 , '*') , 16 , '*') 組合使用

FROM dual ;


--字符串查找 INSTR(),0表示沒有查找到。

select ename, instr(ename,'a') from emp;

--max最大值,sum 總和,desc降,asc 升

--NVL(E1, E2)的功能為:如果E1為NULL,則函數返回E2,否則返回E1本身。

select sal,nvl(sal,'salweikong') from emp;


--decode(字段或字段的運算,值1,值2,值3)這個函數運行的結果是,當字段或字段的運算的值等於值1時,該函數返回值2,否則返回值3當然值1,值2,值3也可以是表達式,

select sal, decode(sal,'100','ok','no') from emp;


--CONCAT('23','wer')函數用於將兩個字符串連接起來,形成一個單一的字符串

select ename,sal,concat(ename,sal) as 聯合 from emp;



--alt+tab鍵,桌面切換。

--grouping,GROUPING函數可以接受一列,返回0或者1。如果列值為空,那麽GROUPING()返回1;如果列值非空,那麽返回0。

--GROUPING只能在使用ROLLUP或CUBE的查詢中使用。當需要在返回空值的地方顯示某個值時,GROUPING()就非常有用。

select sal, case grouping(sal) when 1 then '男性' else '女性' end as 性別 from emp group by rollup(sal);

select empno, sal,ename from emp for update;

select sal, ename from emp group by sal,ename;

select sal, ename from emp group by rollup(sal,ename);--a+b,a+null,null+null

select sal, ename from emp group by cube(sal,ename);--所有組合。

--abs(數值)返回數值的絕對值。

--ceil(數值)根據輸入值返回一個數值,輸入參數可以是非整數,但返回結果則是大於等於輸入參數的最小整數。

--to_char

select to_char(ename) as enametochar from emp;

select * from emp1 for update ;

select * from emp for update ;

--left join .. on , right join ..on . 左右連接。

select t1.empno , t1.ename from emp t1 right join emp1 t2 on t1.empno=t2.empno;


--dual 是一張表,只有一個字段的偽表。


--round ,對小數的處理是四舍五入。

select round(456.1214) 不保留小數,round(45.13632,2) 保留兩位小數,round(2154.121,-2) 處理整數進位 from dual;


--trunc ,直接截取掉了,不四舍五入。

SELECT TRUNC(789.652) 截取小數, TRUNC(789.657,2) 截取兩位小數, TRUNC(789.652,-2) 取整 FROM dual ;



--獲取系統當前時間。

select sysdate+3 三天之後日期,add_months(sysdate , 3) 三個月之後日期 ,next_day(sysdate,'星期日') 下一個星期日 ,last_day(sysdate) 當前月的最後一天 , months_between(sysdate+30,sysdate) 相差月數 from dual;


--修改日期顯示格式。

alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';


--從日期中獲取出年月日。 month hour , minute , second , 時分秒。

select extract(year from date '2017-10-13') years , extract(month from date '2017-10-13') months , extract(day from date '2017-10-13') days from dual;



---復雜的時間間隔。

select extract (day from datatime_one - datetime_two) days from ( select to_timestamp('1982-08-13 12:17:57','yyyy-mm-dd hh24:mi:ss') datatime_one , to_timestamp('1981-09-27 09:08:33','yyyy-mm-dd hh24:mi:ss') datetime_two from dual);



--to_date, to_number , nullif , coalesce

SELECT TO_DATE('1979-09-19','YYYY-MM-DD') FROM dual ;


--NULLIF(表達式1,表達式2),如果表達式1和表達式2相等則返回空值,如果表達式1和表達式2不相等則返回表達式1的結果。

--COALESCE(表達式1,表達式2,...,表達式n),n>=2,此表達式的功能為返回第一個不為空的表達式,如果都為空則返回空值。


select nullif(ename , sal) from emp;


select nullif(ename , ename) from emp;


select coalesce(sal,ename ) from emp;



數據庫函數