1. 程式人生 > 實用技巧 >ORACLE單行函式的詳細說明及程式碼演示

ORACLE單行函式的詳細說明及程式碼演示

此文轉載自:https://blog.csdn.net/weixin_50296887/article/details/111941604

ORACLE單行函式的詳細說明及程式碼演示
SQL語言中,常用的是資料庫軟體ORACLE,而在ORACLE中,有一些常用的單行函式,即操作一行資料,返回一個結果。

一.字元函式

字元函式是專門用來處理字串資料的函式,比較常用的有以下有些
首先,我們先假設有一張員工表,名為EMP

1.轉碼函式

ASCII(A) 返回字元X的ASCII碼

SQL> SELECT ASCII('A'), ASCII(ENAME) FROM EMP;

2.拼接函式

CONCAT(A,B) 用來拼接字串A和B
注意:此函式工作中常用

SQL>SELECT CONCAT(EMPNO, ENAME)
拼接 FROM EMP;

解釋:EMP表中的EMPNO, ENAME欄位無空格拼接在一起

3.計算長度函式

LENGTH(A) 返回A的長度

SQL>SELECT ENAME, LENGTH(ENAME)  FROM EMP;

解釋: LENGTH()用來計算EMP表中ENAME欄位的長度

4.大小寫轉換函式

LOWER(A) 將A轉換成小寫
UPPER(a) 將a轉換成大寫

SQL>SELECT UPPER(ENAME) , LOWER(ENAME) FROM EMP;

解釋:EMP表中ENAME欄位分別被轉換成大寫和小寫

5.首字母大寫函式

INITCAP(A) 將A欄位的首字母大寫顯示出來

SQL>SELECT INITCAP(ENAME) FROM EMP;

解釋:EMP表中ENAME欄位的首字母被轉換成小寫

6.替換函式

REPLACE(A,a,b)
說明:在A欄位中查詢小a,並將a替換成b

SQL>SELECT ENAME, REPLACE(ENAME, 'A', '00') 替換 FROM EMP;

解釋:EMP表中ENAME欄位包含A的都被替換成00

7.逐個替換函式

TRANSLATE(A,aa,bb)
說明:在A欄位中查詢小aa,並將aa替換成bb

SQL>SELECT ENAME, TRANSLATE(ENAME, 'ABCD', '1234') FROM
EMP;

解釋:EMP表中ENAME欄位包含ABCD的被逐個替換成1234;

8.去空字元函式

TRIM(’ X ')
說明:把X的兩邊空格去掉

SQL>SELECT TRIM('    hnnbb    ')  FROM dual;
結果:hnnbb

LTRIM(X[,TRIM_STR])
說明:把X的左邊截去trim_str字串,預設截去空格
SELECT lTRIM(’ hnnbb ') FROM dual;

SQL>SELECT LTRIM('    hnnbb    ') FROM dual;
結果:hnnbb

解釋:hnnbb左邊的空格被去除掉了,但右邊的空格還存在。

RTRIM(X[,TRIM_STR]) FROM dual;
說明:把X的右邊截去trim_str字串,預設截去空格
SELECT RTRIM(’ hnnbb ') FROM dual;

SQL>SELECT RTRIM('    hnnbb    ') FROM dual;
結果:hnnbb

解釋:hnnbb右邊的空格被去除掉了,但左邊的空格還存在。

9.擷取函式

SUBSTR(X,start,[length])
說明:返回X的字串,從start處開始,擷取length個字元,預設length,預設到結尾

SQL>SELECT ENAME, SUBSTR(ENAME, 0, 2) FROM EMP; 

解釋:第一個EMP表中ENAME欄位的資料,第二個是起始位置,第三個是擷取幾個字元;
注意:oracle起始位置0和1 是一樣的

SQL>SELECT ENAME, SUBSTR(ENAME, 3) FROM EMP ;

解釋:擷取EMP表中ENAME欄位資料第3個位置之後所有字元

10.查詢函式

INSTR(X,Y,1)
說明:從X中查詢Y,從第一個位置開始查詢

SQL>SELECT ENAME, INSTR(ENAME, 'T', 1)  from EMP;

解釋:EMP表中ENAME欄位,從第個位置開始查詢T。

INSTR(X,Y,1,n)
說明:從X中查詢Y,從第一個位置開始查詢,n表示第幾次出現

SQL>SELECT ENAME, INSTR(ENAME, 'A', 1, 2) FROM EMP; 

小練習
計算 ‘#121#3#4#56#78#90#’ 第三個#號 到第六個#之間的資料?
思路:
1.計算第三位置+1
2.計算第六位置
3.第六-第三=擷取的長度-1

SQL>SELECT SUBSTR('#121#3#4#56#78#90#',
              INSTR('#121#3#4#56#78#90#', '#', 1, 3) + 1,
              INSTR('#121#3#4#56#78#90#', '#', 1, 6) -
              INSTR('#121#3#4#56#78#90#', '#', 1, 3) - 1)
  FROM DUAL;
  
 結果:4#56#78

二.數值函式

數值函式有可以單獨的用來計算一些數值,接受數字引數,也可以用以表中某些欄位列的計算,還可以是一個數字表達式。

MOD(X,Y)X除以Y的餘數
POWER(X,Y)X的Y次冪
ROUND(X,Y)X在第Y位四捨五入
ABS(X)X的絕對值
SQRT(X)X的平方根
POWER(X,Y)X的Y次冪
TRUNC(X,Y)取整
FLOOR(X)小於或等於X的最大值
CEIL(X)小於或等於X的最小值

三. 轉換函式

1.TO_NUMBER(A)

說明:將一串字元型數字轉換成數字型

SQL>SELECT TO_NUMBER('1231') + 100 FROM DUAL;
結果:1131

若在ORACLE中直接用以下程式碼

SQL>SELECT '1231' + 100 FROM DUAL;

結果依舊是1131,因為ORACLE自動替你轉換了。但是我們應該避免使用這樣的方法計算,因為會導致索引失效;(索引我們理解為目錄,加快查詢速度)

2.TO_CHAR(a,[fmt])

把日期和數字轉換為制定格式的字串。其中,Fmt是格式化字串
以下為程式碼演示,後面的中文為轉換的格式註解

SQL>SELECT TO_CHAR(SYSDATE, 'yyyy'),
       TO_CHAR(SYSDATE, 'mm'),
       TO_CHAR(SYSDATE, 'dd'),
       TO_CHAR(SYSDATE, 'day') 星期幾,
       TO_CHAR(SYSDATE, 'q') 季度,
       TO_CHAR(SYSDATE, 'w') 當月第幾周,
       TO_CHAR(SYSDATE, 'ddd') 當年第幾天,
       TO_CHAR(SYSDATE, 'ww') 這一年的第幾周,
       TO_CHAR(SYSDATE, 'hh24'),
       TO_CHAR(SYSDATE, 'mi'),
       TO_CHAR(SYSDATE, 'ss'),
       TO_CHAR(SYSDATE, 'd') 本週第幾天
  FROM DUAL;

以上程式碼一般用於從日期裡面提取詳細資料使用,工作中非常常用!

3.TO_DATE(X,[fmt])

ci此函式用於將一個字串以fmt格式轉換成一個日期型別

提取日期小知識

不區分上下半年,提取某月,某月中的某天,某周
程式碼演示:

SQL>SELECT TRUNC(SYSDATE,'yyyy'),TRUNC(SYSDATE,'mm'),TRUNC(SYSDATE,'dd'),TRUNC(SYSDATE,'day')FROM dual;

區分上下半年,提取某月,某月中的某天,某周
程式碼演示:

SQL>SELECT round(SYSDATE,'yyyy'),round(SYSDATE,'mm'),round(SYSDATE,'dd'),round(SYSDATE,'day')FROM dual;

總結

這些單行的函式在是SQL語言中是非常基礎的,但是我們要非常熟悉他們的應用。讀者可自行在ORACLE中演示以上程式碼。