Oracle常用單行函數

轉載:https://blog.csdn.net/Mr_PH/article/details/78537103

單行函數:每處理一條記錄返回一條結果.

字符函數
•LOWER : 轉小寫SQL> select lower(ename) from emp;

LOWER(ENAME)

smith
allen
ward

•UPPER : 轉大寫
SQL> select upper(ename) from emp;

UPPER(ENAME)

SMITH
ALLEN
WARD

•INITCAP : 首字母大寫SQL> select initcap(ename) from emp;

INITCAP(ENAME)

Smith
Allen
Ward

•SUBSTR(a,b) : 從b開始截取字符串aSQL> select substr('hello world',4) from dual;

SUBSTR('HELLOWOR

lo worle

•SUBSTR(a,b,c) : 從a字符串的第b位開始截取c長度的字符串SQL> select substr('hello world',4,5) from dual;

SUBSTR('HE

lo wo

•LENGTH(string) : 字符長度SQL> select length('hello world') from dual;

LENGTH('HELLOWORLD')

              11

•LENGTHB(string) : 字節長度SQL> select lengthb('你好') from dual;

LENGTHB('你好')

          6

SQL> select length('你好') from dual;

LENGTH('你好')

         2

•INSTR(a,b) : 在a中查找b 沒有找到返回0SQL> select instr('hello world','d') from dual;

INSTR('HELLOWORLD','D')

                 11

SQL> select instr('hello world','a') from dual;

INSTR('HELLOWORLD','A')

                  0

•LPAD(a,b,c) : 左填充(給a的左邊填充c知道滿足b長度)SQL> select lpad('hello world',20,'*') from dual;

LPAD('HELLOWORLD',20,'*')

*****hello world

•RPAD(a,b,c) : 右填充SQL> select rpad('hello world',20,'*') from dual;

RPAD('HELLOWORLD',20,'*')

hello world*****

•TRIM(a,from,b) : 去除指定字符(從b中去除a) SQL> select trim('h'from'hello world') from dual;

TRIM('H'FROM'HELLOWO

ello world

•REPLACE(a,b,c) : 替換指定字符(將字符串中a中的b替換爲c)SQL> select replace('hello world','l','*') from dual;

REPLACE('HELLOWORLD','

he*o word

數值函數
•ROUND(a,b) : 四捨五入(保留a的b位小數)SQL> select round(4523.1354,2) 保留兩位小數,round(4523.1354,0) 保留整數,round(4523.1354,-2) 保留百位 from dual;

保留兩位小數 保留整數 保留百位


 4523.14       4523       4500

•TRUNC(a,b) : 截取SQL> select trunc(4523.1354,2)截取保留兩位小數,trunc(4523.1354,0) 截取整數,trunc(4523.1354,-2) 截取百位 from dual;

截取保留兩位小數 截取整數 截取百位


     4523.13       4523       4500

•MOD(a,b) : 求餘(a%b)SQL> select mod(1520,30) from dual;

MOD(1520,30)

      20

日期函數
•Oracle中的日期SQL> select sysdate from dual;

SYSDATE

15-11月-17

SQL> select to_char(sysdate,'yyyy-mm-dd') from dual;

TO_CHAR(SYSDATE,'YYY

2017-11-15

SQL> select to_char(sysdate,'yyyy-mm-dd-hh24-mi-ss') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DD-HH24-MI-SS

2017-11-15-09-48-47

•時間的加減(兩個時間類型可以相減但是不能相加)SQL> select (sysdate-1) 昨天,sysdate 今天 ,(sysdate+1) 明天 from dual;

昨天 今天 明天


14-11月-17 15-11月-17 16-11月-17

•MONTHS_BETWEEN(a,b) : 兩個日期相差的月數(a-b)SQL> select months_between(sysdate,hiredate) from emp;

MONTHS_BETWEEN(SYSDATE,HIREDATE)

                  442.948817
                  440.852043
                  440.787527
                  439.432688
                  433.593978

•ADD_MONTHS(a,b) : 給日期a加b月SQL> select add_months(sysdate,3) from dual;

ADD_MONTHS(SYS

15-2月 -18

SQL> select add_months(sysdate,-3) from dual;

ADD_MONTHS(SYS

15-8月 -17

•LAST_DAY(day) : 某個日期當前月的最後一天SQL> select last_day(sysdate) from dual;

LAST_DAY(SYSDA

30-11月-17

•NEXT_DAY(a,b) : a日期的下一個星期bSQL> select next_day(sysdate,'星期一') from dual;

NEXT_DAY(SYSDA

20-11月-17

SQL> select next_day(sysdate,'星期五') from dual;

NEXT_DAY(SYSDA

17-11月-17

•ROUND(a,b) : a日期保留b,四捨五入,TRUNC同理SQL> select round(sysdate,'month') from dual;

ROUND(SYSDATE,

01-11月-17

SQL> select round(sysdate,'year') from dual;

ROUND(SYSDATE,

01-1月 -18

SQL> select round(sysdate,'day') from dual;

ROUND(SYSDATE,

12-11月-17

轉換函數

•TO_CHAR(data,'format_model')SQL> select to_char(sysdate,'dy') 星期幾 from dual;

星期幾

星期三

SQL> select to_char(sysdate,'day') 第幾天 from dual;

第幾天

星期三

SQL> select to_char(sysdate,'month') 第幾月 from dual;

第幾月

11月

SQL> select to_char(sysdate,'yyyy') 第幾年 from dual;

第幾年

2017

SQL> select to_char(sysdate,'year') 第幾年 from dual;

第幾年

twenty seventeen

SQL> select to_char(sysdate,'mm') 第幾月 from dual;

第幾

11

SQL> select sal from emp;

   SAL

   800
  1600
  1250
  2975
  1250
  2850
  2450
  3000
  5000
  1500
  1100

   SAL

   950
  3000
  1300

已選擇14行。

SQL> select to_char(sal,'L99,999.99') from emp;

TO_CHAR(SAL,'L99,999.99')

       ¥800.00
     ¥1,600.00
     ¥1,250.00
     ¥2,975.00
     ¥1,250.00
     ¥2,850.00
     ¥2,450.00
     ¥3,000.00
     ¥5,000.00
     ¥1,500.00
     ¥1,100.00

TO_CHAR(SAL,'L99,999.99')

       ¥950.00
     ¥3,000.00
     ¥1,300.00

已選擇14行。
注:L爲本地貨幣符號,“,”爲千位符,“.”爲小數,“9”爲精度

•TO_NUMBER(data,'format_model')SQL> select to_number(sal,'L99,999.99') from (select to_char(sal,'L99,999.99') sal from emp s);

TO_NUMBER(SAL,'L99,999.99')

                    800
                   1600
                   1250
                   2975
                   1250
                   2850
                   2450
                   3000
                   5000
                   1500
                   1100

TO_NUMBER(SAL,'L99,999.99')

                    950
                   3000
                   1300

通用函數
•NVL(a,b) : 濾空(當a爲null時返回b)SQL> select nvl(comm,0) from emp;

NVL(COMM,0)

      0
    300
    500
      0
   1400

•NVL2(a,b,c) : 類型VAL(a,b) 當a爲空時返回c否則返回bSQL> select nvl2(comm,comm,0) from emp;

NVL2(COMM,COMM,0)

            0
          300
          500
            0

•NULLIF(a,b) : 當a=b時返回null 否則返回aSQL> select nullif(1500,1500) from dual;

NULLIF(1500,1500)

SQL> select nullif(1500,160) from dual;

NULLIF(1500,160)

        1500

•COALESCE(expr1,expr2,....) : 從左到右找到第一個不爲空的值否則返回空SQL> select coalesce(null,1,null,2) from dual;

COALESCE(NULL,1,NULL,2)

                  1

SQL> select coalesce(null,null,null,2) from dual;

COALESCE(NULL,NULL,NULL,2)

                     2

SQL> select coalesce(null,null,null,null) from dual;

C

條件表達式
•CASE表達式(SQL99語法,較爲繁瑣)SQL> select ename,job,sal 漲前 ,
2 case job when 'PERSIDENT' then sal+1000
3 when 'MANAGER' then sal+800
4 else sal+500
5 end 漲後
6 from emp;

ENAME JOB 漲前 漲後


SMITH CLERK 800 1300
ALLEN SALESMAN 1600 2100
WARD SALESMAN 1250 1750
JONES MANAGER 2975 3775
MARTIN SALESMAN 1250 1750
BLAKE MANAGER 2850 3650
CLARK MANAGER 2450 3250
SCOTT ANALYST 3000 3500
KING PRESIDENT 5000 5500
TURNER SALESMAN 1500 2000
ADAMS CLERK 1100 1600

ENAME JOB 漲前 漲後


JAMES CLERK 950 1450
FORD ANALYST 3000 3500
MILLER CLERK 1300 1800

已選擇14行。

•DECODE函數(Oracle語法,較爲簡潔)SQL> select ename,job,sal 漲前,
2 decode(job,'PERSIDENT',sal+1000,
3 'MANAGER',sal+800,
4 sal+400) 漲後
5 from emp;

ENAME JOB 漲前 漲後


SMITH CLERK 800 1200
ALLEN SALESMAN 1600 2000
WARD SALESMAN 1250 1650
JONES MANAGER 2975 3775
MARTIN SALESMAN 1250 1650
BLAKE MANAGER 2850 3650
CLARK MANAGER 2450 3250
SCOTT ANALYST 3000 3400
KING PRESIDENT 5000 5400
TURNER SALESMAN 1500 1900
ADAMS CLERK 1100 1500

ENAME JOB 漲前 漲後


JAMES CLERK 950 1350
FORD ANALYST 3000 3400
MILLER CLERK 1300 1700

已選擇14行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章