Oracle單組函式

2021-09-07 04:00:34 字數 4633 閱讀 5905

select upper ('abcde') from dual ; 

--lower----- 把字元轉換成小寫

select lower('abcde') from dual ; 

--initcap  -----返回所有單詞的首字母大寫,其他字母小寫

select initcap(ename) from emp; 

--concat   -----字串連線 ,相當於||

select concat('a','b')  from dual; 

select 'a' || 'b' from dual;

--substr -------查詢字串

select substr('abcde',length('abcde')-2) from dual; 

select substr('abcde',-3,3) from dual;

substr(string,position,substring_length)

1、如果position=0,  則被當做1

2、如果position>1,    則從position位置開始找

3、如果position<1,    則從結尾開始找

4、如果第三個位置沒有指定,則從指定位置到結尾

--length ------字串的長度

select length(dname) from dept;

--replace -----字串替換

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

--instr -- -----字串查詢,返回索引值

select instr('hello world','or') from dual; --8 indexof

--lpad   ------左側填充

select lpad('smith',10,'*') from dual--左側填充  *****smith

--rpad   ------右側填充

select rpad('smith',10,'*') from dual--右側填充  smith*****

--trim   -------過濾首位空格 

select trim('    mr smith          ') from dual --過濾首尾空格   mr smith

--數值函式

--round   -----四捨五入,取精度

select round(462,-2) from dual;      ------負數往小數點前數    ----500

select round(412.313,2) from dual; -----正數往小數點後數     ----412.13

--trunc   -----不四捨五入,直接取最大值

select trunc(462.13,-2) from dual;                                      ----400

--日期函式

--months_between()   -----兩個時間之間隔了多少個月

select months_between(sysdate,hiredate) from emp;

--add_months()          ------在某個時間點上加乙個月

select add_months(sysdate,1) from dual;

--next_day()

select next_day(sysdate,'星期一') from dual; ----返回下乙個星期一的日期

--last_day

select last_day(sysdate) from dual;             ----返回這個月的最後一天

--轉換函式

--to_char 

select to_char(sysdate,'yyyy') from dual;            ---2011

select to_char(sysdate,'yyyy-mm-dd') from dual; ----2011-07-16

select to_char(sal,'l999,999,999') from emp;       ----

select to_char(sysdate,'d') from dual; --返回星期  ----7

--to_number 

select to_number('13')+to_number('14') from dual;    ------27      

--to_date

select to_date('2009-02-10','yyyy-mm-dd') from dual;  ----2009/2/10

select to_char('001') from dual;                                     ----001

select to_number('003')from dual;                                -----3

--通用函式 

--nvl()函式    -----有值返回本身,無值返回0

select nvl(comm,0) from emp;

--nullif()函式  ----如果表示式 exp1 與exp2 的值相等則返回 null,否則返回 exp1 的值

nullif(exp1,exp2)

--nvl2()函式

select empno, ename, sal, comm, nvl2(comm, sal+comm, sal) total from emp;   ----如果comm不為null,返回sal+comm,否則返回comm

--coalesce()函式--依次考察各引數表示式,遇到非null值即停止並返 回該值。

select empno, ename, sal, comm, coalesce(sal+comm, sal, 0)總收入  from emp;

--case表示式 

select empno, ename, sal, 

case deptno   

when 10 then '財務部' 

when 20 then '研發部' 

when 30 then '銷售部' 

else '未知部門'       

end 部門 

from emp;

--decode()函式--和 case表示式類似,decode()函式也用於實現多路分支結構 

select empno, ename, sal, 

decode(deptno, 10, '財務部', 

20, '研發部', 

30, '銷售部', 

'未知部門')       

部門 from emp; 

case在sql中有兩種寫法,先建立乙個表

create table salgrade(grade int, sal int);

insert into salgrade values(1,1000);

insert into salgrade values(2,2000);

insert into salgrade values(3,3000);

第一種寫法,簡單寫法:

select grade,sal,

case grade

when 1 then 'low'

when 2 then 'middle'

else 'high'

endfrom salgrade;

第二種寫法,查詢寫法:

select grade,sal,

case when sal <=1000 then 'low'

when sal <=2000 then 'middle'

else 'high'

endfrom salgrade;

decode只能代替第一種寫法:

select grade,sal,decode(grade,1,'low',2,'middle','high') from salgrade;

--單行函式巢狀 

select empno, lpad(initcap(trim(ename)),10,' ')    name, job, sal from emp;

oracle一些常用的單記錄函式

總結一些oracle中常用的單記錄函式。1.0 nvl 作用 從兩個表示式返回乙個非null值 用法 nvl 表示式1,表示式2 如果表示式1的結果不為null,返回表示式1的結果 如果表示式1的結果為null,返回表示式2的結果。引申 表示式1的結果為null,返回表示式2的結果,而表示式2的結果...

Oracle資料庫學習(5)分組函式

g 平均函式 max 最大值函式 min 最小值函式 sum 求和函式 stddev 標準差函式 count 計數函式 例子1 對員工表查詢平均工資 最高工資 最低工資 標準差工資 總工資 總員工數 select round g salary 2 平均工資 max salary 最高工資 min s...

ORACLE單錶查詢

介紹 oracle資料庫系統是美國oracle公司 甲骨文 提供的以分布式資料庫為核心的一組軟體產品,oracle有很多種查詢方法,現在我來教大家一些簡單的條件查詢 第一種 較為精準的查詢 我要從oracle資料庫中查詢姓king名字為steven的人 select from employees w...