Oracle單行函數


單行函數格式:

函數名【(參數1,參數2,參數3,...)】

其中參數可以為用戶定義的常量、變量、列名和表達式。

單行函數只對表中的一行數據進行操作,並且對每一行數據只產生一個輸出結果。

單行函數可用在SELECT、WHERE和ORDER BY的子句中,而且單行函數可以嵌套。

單行函數包含字符型。數字型、日期型、轉換型和一般型函數。

1.單行字符型函數

(1)LOWER(列名|表達式):該函數用於把字符轉換成小寫。

SELECT LOWER('SQL: Structural Query Language')
FROM dual;

dual是系統的一個虛表(偽表),原因:

在查詢語句中必須包含SELECT和FROM兩個子句,可是LOWER('SQL: Structural Query Language')不屬於任何表,於是用Oracle提供的虛表dual來解決這一難題。

(2)UPPER(列名|表達式):該函數用於把字符轉換成大寫。

SELECT UPPER('sql is used exclusively in rdbmses')
FROM dual;

(3)INITCAP(列名|表達式):該函數用於把每個字的頭一個字符轉換成大寫,其余轉換成小寫。

SELECT INITCAP('SQL is an ENGLISH LIKE language')
FROM dual;

(4)CONCAT(列名|表達式,列名|表達式):該函數用於把第1個字符串和第2個字符串連接成一個字符串。

SELECT CONCAT('SQL alows you to manipulate the data in DB',' without any programming knowledge')
FROM dual;

(5)SUBSTR(列名|表達式,m,[n]):該函數用於返回指定的子串,該子串從第m個字符開始,其長度為n。

SELECT SUBSTR('SQL lets you concentrate on what has to be done',14)
FROM dual;

(6)LENGTH(列名|表達式):該函數用於返回列或表達式中字符串的長度。

SELECT LENGTH('SQL does no let you concentrate on how it will be achieved')
FROM dual;

(7)INSTR(列名|表達式,‘字符串’,[m],[n]):該函數用於返回所給字符串的數字位置,m表示從第m個字符開始搜索,n表示所給字符串出現的次數,它們的默認值都為1。

SELECT INSTR('SQL allows for dynamic DB changes','F')
FROM dual;
SELECT INSTR('SQL allows for dynamic DB changes','f')
FROM dual;

 (8)TRIM([leading|trailing|both]要去掉的字符FROM源字符串):該函數能夠從“源字符串”中的頭(leading)部、尾(trailing)部或頭部和尾部中(both)去掉“要去掉的字符串”。如果沒有指定頭或尾,TRIM函數按默認(both)處理(該函數是8i引入的,在8i之前的版本中是LTRIM和RTRIM兩個函數)。

SELECT TRIM('?' FROM '?SQL*PLUS is the SQL implementation used in an Oracle RDBMS or ORDBMS.')
FROM dual;
SELECT TRIM('?' FROM 'It can process data in sets of rows??')
FROM dual;
SELECT TRIM('s' FROM 'sql*plus is a fourth generation query language')
FROM dual;
SELECT TRIM(trailing 's' FROM 'sql*plus is a fourth generation query languages')
FROM dual;

(9)REPLACE(正文表達式,要搜尋的字符串,替換字符串):該函數用於在“正文表達式”中查找“要搜尋的字符串”,如果找到了就用“替換字符串”替代。

SELECT REPLACE('SQL*PLUS supports loops or if statements','supports','does not support')
FROM dual;

實例:

SELECT empno AS "Code",UPPER(ename) NAME,INITCAP(job) "Job"
FROM emp
WHERE LOWER(job)='salesman';

SELECT CONCAT(ename,job) "Employee",SUBSTR(job,1,5) "Title",LENGTH(ename) "LENGTH",INSTR(job,'M')
FROM emp
WHERE LOWER(job)='salesman';

2.數字型函數

ROUND(列名|表達式,n):該函數將列名或表達式所表示的數值四舍五入到小數點的n位。

TRUNC(列名|表達式,n):該函數將列名或表達式所表示的數值取到小數點的后n位。

MOD(m,n):該函數將m除以n並取余數。

select round(168.888,1),TRUNC(168.888,1)
from dual;

select round(168.888),TRUNC(168.888)
from dual;

 select round(168.888,-1),TRUNC(168.888,-1)
from dual;

select mod(1900,400)
from dual;

3.日期型數據

Oracle的日期型數據的內部存儲格式為:世紀,月,日,時,分,秒。

從Oracle9i開始,日期型數據輸入和輸出的默認格式為DD-MON-RR,而在這之前的版本中為DD-MON-YY。

如果使用的是中文操作系統,而數據庫的字符集為美國英語,為了使日期型數據的顯示正確,輸入如下命令:

alter session set NLS_DATE_LANGUAGE='AMERICAN';

Oracle提供了系統日期函數SYSDATE,它返回當前的系統時間。

select sysdate from dual;

把一個日期型數據和一個數字相加減,結果仍為日期型。

select sysdate-10 from dual;
select sysdate+10 from dual;

兩個日期型數據相減,其結果為數字型。to_date將字符串轉換成日期型數據。

select to_date('15-JUL-02')-sysdate from dual;

把一個日期型數據和一個小時數相加減后除以24,其結果仍為日期型。

select sysdate - 22/24 from dual;

select empno,ename,job,sal,(sysdate-hiredate)/365 "Years" from emp where job like 'SAL%';


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM