1. 程式人生 > 資料庫 >Oracle 開發——單行函式

Oracle 開發——單行函式

單行函式

本次文章主要學習

-理解函式的作用
-掌握單行函式的五大分類函式
-其中,會一直用到到的虛表
DUAL:是一張虛表,不能儲存任何資料,只有一個欄位,一行記錄。當我們不希望從任何表中讀取資料,同時又想利用SQL引擎中的計算表示式的能力幫我們運算時,就可以使用DUAL表

SQL函式概述
在這裡插入圖片描述

SQL函式分類主要分為兩種
-單行函式
-多行函式
在這裡插入圖片描述

單行函式語法

語法:
函式名[(引數1,引數2,…)]

其中的引數可以是以下之一:

  1. 變數
  2. 列名
  3. 表示式

單行函式特徵

  1. 單行函式特徵
  2. 單行函式對單行操作
  3. 每行返回一個結果
  4. 有可能返回值與原引數資料型別不一致
  5. 單行函式可以寫在SELECT、WHERE、ORDER BY子句中
  6. 有些函式沒有引數,有些函式包括一個或多個引數
  7. 函式可以巢狀

單行函式分類

分為5大類

  • 字元函式
  • 數值函式
  • 日期函式
  • 轉換函式
  • 通用函式

字元函式

字元函式
- 字元函式:主要指引數型別是字元型,不同函式返回值可能是字元型數值型

大小寫函式

LOWER(列名|表示式)

將大寫或大小寫混合的字元轉換成小寫

select lower('ABCDE')
from dual;

在這裡插入圖片描述

UPPER(列名|表示式)

將小寫或大小寫混合的字元轉換成大寫

select upper('abcde')
from dual;

在這裡插入圖片描述

INITCAP(列名|表示式)

將每個單詞的第一個字母轉換成大寫,其餘的字母都轉換成小寫

select initcap('oycp oyyyyy')
from dual;

在這裡插入圖片描述

字元處理函式

CONCAT(column1|expression1,column2|expression2)

連線兩個值 ,等同於||

select concat(ename,sal)
from emp;

在這裡插入圖片描述

SUBSTR (column|expression,n1[,n2])

返回第一個引數中,從第n1位開始,長度為n2的子串。
如果n2省略,取第n1位開始的所有字元。
如果n1是負值,表示從第一個引數的後面第abs(n1)位開始向右取長度為n2的子串。

select substr('abcdefg',1,3)
from dual;

在這裡插入圖片描述

LENGTH(column | expression)

取字元長度

select length('abcdefg')
from dual;

在這裡插入圖片描述

INSTR(s1,s2,[,n1],[n2])

返回s1中,子串s2從n1開始,第n2次出現的位置。n1,n2預設值為1

select instr('abcdefg','c')---3
from dual;

在這裡插入圖片描述

LPAD(s1,n1,s2)

返回s1被s2從左面填充到n1長度後的字串。

select lpad('abc',11,'*')
from dual;

在這裡插入圖片描述

RPAD(s1,n1,s2)

返回s1被s2從右面填充到n1長度後的字串。

select rpad('abc',11,'*')
from dual;

在這裡插入圖片描述

TRIM

去除字串頭部或尾部(頭尾)的字元格式:TRIM(leading | trailing | both trim_character From trim_source)

select trim('c' from 'abcdefccccccccc')
from dual;
![在這裡插入圖片描述](https://www.icode9.com/img/ll/?i=20201230190643897.png)
REPLACE(s1,s2,s3)

把s1中的s2用s3替換。

select replace('abcdef','c','p')----abpdef
from dual;

在這裡插入圖片描述

數值函式

ROUND

將列或表示式所表示的數值四捨五入到小數點後的第n位。

格式: ROUND(column| expression, n)
ROUND(45.926, 2) -> 45.93

select round(12.4846,2)
from dual;

在這裡插入圖片描述

TRUNC

將列或表示式所表示的數值擷取到小數點後的第n位。

格式:TRUNC(column| expression, n)
TRUNC(45.926, 2) -> 45.92

select trunc(12.4846,2)
from dual;

在這裡插入圖片描述

MOD

取m除以n後得到的餘數

格式:MOD(m,n)
MOD(1600, 300) ->100

select mod(1600,300)
from dual;

在這裡插入圖片描述

常用日期函式

SYSDATE

返回系統日期

select sysdate
from dual;

在這裡插入圖片描述

MONTHS_BETWEEN

返回兩個日期型別資料之間間隔的自然月數

SELECT  ename, sal, MONTHS_BETWEEN(SYSDATE,hiredate) months
FROM 	emp
ORDER BY months;

在這裡插入圖片描述

ADD_MONTHS

返回指定日期加上相應的月數後的日期

SELECT  ename, sal, hiredate, ADD_MONTHS(hiredate,3) new_date
FROM	  emp
WHERE  hiredate>'01-1月-82';

在這裡插入圖片描述

NEXT_DAY

返回某一日期的下一個指定日期

SELECT  NEXT_DAY('02-2月-06','星期一') NEXT_DAY
FROM 	DUAL;

在這裡插入圖片描述

LAST_DAY

返回指定日期當月最後一天的日期

SELECT LAST_DAY('02-2月-06') "LAST DAY"
FROM	DUAL;

在這裡插入圖片描述

ROUND(date[,‘fmt’])

將date按照fmt指定的格式進行四捨五入,fmt為可選項,如果沒有指定fmt,則預設為DD,將date四捨五入為最近的天。
格式碼:世紀CC,年YY,月MM,日DD,小時HH24,分MI,秒SS

SELECT  empno, hiredate, 
        ROUND(hiredate, 'MONTH')
FROM	  emp
WHERE  SUBSTR(hiredate,-2,2)='81'

在這裡插入圖片描述

TRUNC(date[,‘fmt’])

將date按照fmt指定的格式進行截斷,fmt為可選項,如果沒有指定fmt,則預設為‘DD’,將date擷取為最近的天。

SELECT	empno, hiredate, TRUNC(hiredate, 'MONTH')
FROM		emp
WHERE	SUBSTR(hiredate,-2,2)='81';

在這裡插入圖片描述

EXTRACT

返回日期型別資料中的年份、月份或者日

SELECT  ename, hiredate, 
	      EXTRACT (MONTH  FROM  HIREDATE) MONTH
FROM   emp
WHERE  deptno= 10;

在這裡插入圖片描述

轉換函式

分為兩種

  • 隱式資料型別轉換
  • 顯式資料型別轉換
隱式資料型別轉換規則

不同的資料型別之間關聯,如果不使用顯式轉換函式,則它會根據以下規則對資料進行隱式轉換:

  • 對於INSERT和UPDATE操作,oracle會把插入值或者更新值隱式轉換為欄位的資料型別
  • 對於SELECT語句,oracle會把欄位的資料型別隱式轉換為變數的資料型別
    當比較一個字元型和數值型的值時,oracle會把字元型的值隱式轉換為數值型
  • 當比較字元型和日期型的資料時,oracle會把字元型轉換為日期型
  • 用連線操作符(||)時,oracle會把非字元型別的資料轉換為字元型別
  • 如果字元型別的資料和非字元型別的資料(如number、date、rowid等)作算術運算,則oracle會將字元型別的資料轉換為合適的資料型別,這些資料型別可能是number、date、rowid等
顯式資料型別轉換

通常是在字元型別日期型別數值型別之間進行顯式轉換。主要有3個顯式轉換函式:

  • TO_CHAR
  • TO_NUMBER
  • TO_DATE
TO_CHAR 用於日期型

日期格式模型:

  • 必須用單引號引起來並且是大小寫敏感的
  • 可以包含任何有效的日期元素
  • 使用逗號將日期型資料與日期型格式模型分隔開
SELECT ename,TO_CHAR(hiredate,'MM/YY') month_hired 
FROM emp;

在這裡插入圖片描述
日期格式模型的元素
在這裡插入圖片描述

TO_CHAR 用於數值型

通過在TO_CHAR中使用以下形式可以把數值型資料轉化成變長的字串:
在這裡插入圖片描述

 SELECT	TO_CHAR(sal,'$99,999') SALARY
   FROM	emp
   WHERE	ename = 'SCOTT';

在這裡插入圖片描述

TO_NUMBER 函式

使用TO_NUMBER將一個字串轉換成數值型資料

TO_NUMBER(char[, 'fmt'])

注意:要轉換的char型別資料必須是由數字組成的字串,格式碼中相應的格式必須要和char中的格式匹配。

TO_DATE 函式
select to_date('2020/12/30','YYYY/MM/DD')
from dual

在這裡插入圖片描述

通用函式

與空值(NULL)相關的一些函式,完成對空值(NULL)的一些操作。主要包括以下函式:

NVL

語法:NVL (expr1,expr2)
如果expr1不是null,返回expr1,否則返回expr2

NVL2

語法:NVL2(expr1,expr2,expr3)
如果expr1不是null,返回expr2,否則返回expr3

NULLIF

語法: NULLIF(expr1,expr2)
比較兩個表示式,如果相等,返回null,否則,返回第一個表示式

COALESCE

COALESCE (表示式1, 表示式2, … 表示式n)函式是對NVL函式的擴充套件。COALESCE函式的功能是返回第一個不為空的引數,引數個數不受限制。

SELECT  ename, COALESCE(comm, 0)  comm , deptno
FROM   emp;

在這裡插入圖片描述

條件處理函式:

CASE表示式
SELECT ename, deptno,
       (CASE deptno     
	          WHEN 10  THEN '銷售部'
                        WHEN 20  THEN '技術部'
                        WHEN 30  THEN '管理部'
                          ELSE '無'    END)   
                            deptname   
FROM emp;

在這裡插入圖片描述

DECODE
SELECT ename, deptno,
  decode(deptno,
    10,'銷售部',
    20,'技術部',
    30 , '管理部',
    '無')   deptname
FROM emp;

在這裡插入圖片描述

收工,謝謝