ORACLE單行函式的詳細說明及程式碼演示
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中演示以上程式碼。