【Oracle學習筆記】單行函數

寫在前面:

單行函數的概念:

單行函數:接受一個數據,輸出一個數據;
多行函數:聚合函數,分組函數。接受一組數據,輸出一個數據。

常見字符函數

大小寫相關: LOWER , UPPER , INITCAP
其他:TRIM , LTRIM , RTRIM , LPAD , PPAD , INSTR , SUBSTR , LENGTH , CONCAT , REPLACE

  • LOWER會將所有字符轉換爲小寫
  • UPPER會將所有字符轉換爲大寫
  • INITCAP會將首字母轉換爲大寫

example:

SELECT lower('Hello'),upper('Hello'),initcap('Hello')
FROM dual;
  • TRIM從字符串的首尾去掉特定字符
  • LTRIM從字符串的首部去掉特定字符
  • RTRIM從字符串的尾部去掉特定字符

example:

SELECT trim('H' FROM 'HelloHH'), ltrim('HelloHH', 'H'),rtrim('HelloHH', 'H')
FROM dual;
  • LPAD向左補齊
  • PPAD向右補齊

grammar : lpad(數值,多少位,填充內容) rpad(數值,多少位,填充內容)

example :

SELECT lpad(1000,7,'*'),rpad(1000,7,'*')
FROM dual;
  • INSTR 查找字符串的位置(注意:在Oracle中,字符串的位置是從1開始的

grammar : instr(原來的字符串,要查找位置的字符串)

example :

SELECT instr('hello tom','tom')
 FROM dual;
  • SUBSTR 求字串,從某個位置到開始截取一定長度

grammar : substr(字符串,從哪個位置開始截取,截取多少個字符[不寫則截取到最後一個])

example:

SELECT substr('hello',3,2)
FROM dual;
  • LENGTH 求字符串的長度

example :

SELECT length('tom')
FROM dual;
  • CONCAT 連接兩個字符串

example :

SELECT concat('tom','my')
FROM dual;
  • REPLACE替換字符串

example:

SELECT replace('hello','h','xxx')
FROM dual;

常用字符函數例子整合:

SELECT lower('Hello'),upper('Hello'),initcap('Hello')
FROM dual;

SELECT trim('H' FROM 'HelloHH'), ltrim('HelloHH', 'H'),rtrim('HelloHH', 'H')
FROM dual;

SELECT lpad(1000,7,'*'),rpad(1000,7,'*')
FROM dual;

SELECT instr('hello tom','tom')
FROM dual;

SELECT substr('hello',3,2)
FROM dual;

SELECT length('tom')
FROM dual;

SELECT concat('tom','my')
FROM dual;

SELECT replace('hello','h','xxx')
FROM dual;

常見數值函數

  • ROUND四捨五入

example :

SELECT round(123.456,2),round(123.456,-2),round(123.45,0),round(123.456)
FROM dual;

round(123.456,2)小數點兩位後四捨五入
round(123.456,-2)小數點前兩位四捨五入
round(123.45,0)按照小數點四捨五入
round(123.456)與round(123.456,0)相同

  • TRUNC去尾

example :

SELECT trunc(12.456,2),trunc(123.456,-2),trunc(123.45,0),trunc(123.456)
FROM dual;

trunc(12.456,2)小數點後保留兩位
trunc(123.456,-2)小數點前保留兩位
trunc(123.45,0)按照小數點保留
trunc(123.456)與trunc(123.456,0)相同

  • MOD求模

example :

SELECT mod(12,5)
FROM dual;

常用數值函數例子整合:

SELECT round(123.456,2),round(123.456,-2),round(123.45,0),round(123.456)
FROM dual;

SELECT trunc(12.456,2),trunc(123.456,-2),trunc(123.45,0),trunc(123.456)
FROM dual;

SELECT mod(12,5)
FROM dual;

常見日期函數

  • SYSDATE獲取系統當前日期

example :

SELECT sysdate
FROM dual;
  • MONTHS_BETWEEN獲取兩個日期間的相差月數

example : 獲取emp表中員工的入職日期到今天相差的月數

SELECT ename,months_between(sysdate,hiredate)
FROM emp;
  • ADD_MONTH獲取幾個月後的日期

exmaple : 獲取三個月以後的日期

SELECT add_months(sysdate,3)
FROM dual;
  • LAST_DAY獲取本月最後一天的日期

example :

SELECT last_day(sysdate)
FROM dual;
  • EXTRACT從日期中獲取某一部分值

example : 獲取當前日期的年份

SELECT extract(YEAR FROM sysdate)
FROM dual;

example : 獲取當前日期的月份

SELECT extract(MONTH FROM sysdate)
FROM dual;

example : 獲取當前日期的號數

SELECT extract(DAY FROM sysdate)
FROM dual;

常見日期函數例子整合:

SELECT sysdate
FROM dual;

SELECT ename,months_between(sysdate,hiredate)
FROM emp;

SELECT add_months(sysdate,3)
FROM dual;

SELECT last_day(sysdate)
FROM dual;

SELECT extract(YEAR FROM sysdate)
FROM dual;

SELECT extract(MONTH FROM sysdate)
FROM dual;

SELECT extract(DAY FROM sysdate)
FROM dual;

常見轉換函數

  • TO_CHAR將日期或數值轉換爲指定格式的字符

example : 將日期轉換爲指定格式的字符

SELECT to_char(sysdate,'YYYY-MM-DD DAY HH24:MM:SS')
FROM dual;

example : 將數值轉換爲指定格式的字符

SELECT to_char(123.45,'L9,999,999.00')
FROM dual;

其中L表示當地字符,00 表示小數點後如果沒有兩位小數,則用0填充

  • TO_DATE將指定格式字符轉換爲日期

example :

SELECT to_date('1980-01-01','YYYY-MM-DD')
FROM dual;
  • TO_NUMBER將指定格式字符串轉換爲數值

example :

SELECT to_number('$1,222.34','$9,999.99')
FROM dual;

常見轉換函數例子整合:

SELECT to_char(sysdate,'YYYY-MM-DD DAY HH24:MM:SS')
FROM dual;

SELECT to_char(123.45,'L9,999,999.00')
FROM dual;

SELECT to_date('1980-01-01','YYYY-MM-DD')
FROM dual;

SELECT to_number('$1,222.34','$9,999.99')
FROM dual;

其他函數

空值轉換函數:

  • NVL字段爲空,則用相同類型替代

example :

SELECT ename,comm,nvl(comm,0)
FROM emp;

如果字段comm爲空,則用與comm數值類型相同的0代替

  • NVL2如果字段爲空,則返回第二個參數,反之則返回第三個參數

example :

SELECT ename,comm,nvl2(comm,0,sal)
FROM emp;

如果comm字段爲空,則用0代替,如果不爲空,則用sal代替

  • NULLIF兩個字段相同,則爲空,否則返回第一個參數的值

exmaple :

SELECT nullif('123','123')
FROM dual;

控制轉換函數例子整合:

SELECT ename,comm,nvl(comm,0)
FROM emp;

SELECT ename,comm,nvl2(comm,0,sal)
FROM emp;

SELECT nullif('123','123')
FROM dual;

條件分支函數

  • CASE

example :

SELECT ename, deptno, sal,
            CASE deptno
            WHEN 10 THEN sal + 100
            WHEN 20 THEN sal + 200
            WHEN 30 THEN sal + 300
            ELSE sal END AS salary
FROM emp;
  • DECODE

example : 按照部門號碼進行薪資的增加,部門號爲10,薪資增加100,部門號爲20薪資增加200,部門號爲30,薪資增加300,其他則沒有變化

SELECT ename, deptno, sal,
        decode(deptno,
                10,sal + 100,
                20,sal + 200,
                30,sal + 300,
                sal) AS salary
    FROM emp;
SELECT ename, deptno, sal,
        CASE 
        WHEN deptno = 10 THEN sal +100
        WHEN deptno = 20 THEN sal +200
        WHEN deptno = 30 THEN sal +300
        ELSE sal END AS salary
FROM emp;

decode是一個函數, case是一個表達式
但是case有更強大的能力

條件分支函數例子整合:

SELECT ename, deptno, sal,
    decode(deptno,
            10,sal + 100,
            20,sal + 200,
            30,sal + 300,
            sal) AS salary
FROM emp;            

SELECT ename, deptno, sal,
        CASE deptno
        WHEN 10 THEN sal + 100
        WHEN 20 THEN sal + 200
        WHEN 30 THEN sal + 300
        ELSE sal END AS salary
FROM emp;

SELECT ename, deptno, sal,
        CASE 
        WHEN deptno = 10 THEN sal +100
        WHEN deptno = 20 THEN sal +200
        WHEN deptno = 30 THEN sal +300
        ELSE sal END AS salary
FROM emp;        
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章