我的學習之路——Oracle數據庫之單行函數

1單行函數的一些特點

單行函數還有以下的一些特徵:
–單行函數對單行操作
–每行返回一個結果
–有可能返回值與原參數數據類型不一致(轉換函數)
–單行函數可以寫在SELECT、WHERE、ORDER BY子句中
–有些函數沒有參數,有些函數包括一個或多個參數
–函數可以嵌套

2單行函數的分類

字符函數

數字函數

日期函數

轉換函數

通用函數

3 字符函數

大小寫操作函數

LOWER(列名|表達式)其它同理

LOWER,UPPER,INITCAP(將首字母大寫,其它字母小寫)

字符處理函數

CONCAT:連接兩個值,等同於||

CONCAT('Good','String‘)  結果 GoodString

SUBSTR:返回第一個參數中從n1字符開始長度爲n2的子串,如果n1是負值,表從後向前數的abs(n1)位,如果n2省略,取n1之後的所有字符 格式:SUBSTR(column | expression,n1[,n2])

SUBSTR('String',1,3) 結果Str

LENGTH :取字符串的長度 LENGTH('String') 結果 6

INSTR:返回s1中,子串s2從n1開始,第n2次出現的位置。n1,n2默認值爲1 格式:INSTR(s1,s2,[,n1],[n2])

INSTR('String','r') 結果 3

LPAD:返回s1被s2從左面填充到n1長度。 格式:LPAD(s1,n1,s2)

LPAD(sal,10,'*') 結果 ******5000
RPAD:返回s1被s2從右面填充到n1長度。 格式:RPAD(s1,n1,s2)

RPAD(sal,10,'*') 結果5000******
TRIM:去除字符串頭部或尾部(頭尾)的字符 格式:TRIM(leading | trailing | both trim_character From trim_source)

TRIM('S' FROM 'SSMITH') 結果MITH
REPLACE:把s1中的s2用s3替換。 格式:REPLACE(s1,s2,s3)

REPLACE('abc','b','d') 結果adc

查找公司員工編號,用戶名(first_name與last_name連接成一個字符串),職位編號及last_name的長度,要求職位從第四位起匹配'ACCOUNT',同時last_name中至少包含一個’e’字母。
SELECT employee_id, CONCAT(first_name, last_name)
NAME, job_id, LENGTH (last_name) length
FROM employees
WHERE SUBSTR(job_id, 4) = 'ACCOUNT'
AND INSTR(last_name, 'e')>0;

4數字函數

ROUND(列名|表達式, n):將列或表達式所表示的數值四捨五入到小數點後的第n位。
TRUNC(列名|表達式,n):將列或表達式所表示的數值截取到小數點後的第n位。
MOD(m,n):取m除以n後得到的餘數。

5日期函數

常用的日期運算如下:
–日期類型列或表達式可以加減數字,功能是在該日期上加減對應的天數。如:’10-AUG-06’+15結果是’25-AUG-06’。
–日期類型列或表達式之間可以進行減操作,功能是計算兩個日期之間間隔了多少天。如:’10-AUG-06’-‘4-AUG-06’結果四捨五入後是6天。
–如果需要加減相應小時或分鐘,可以使用n/24來實現

SYSDATE:返回系統日期
•MONTHS_BETWEEN:返回兩個日期間隔的月數
•ADD_MONTHS:在指定日期基礎上加上相應的月數
•NEXT_DAY:返回某一日期的下一個指定日期
•LAST_DAY:返回指定日期當月最後一天的日期
•ROUND(date[,'fmt'])將date按照fmt指定的格式進行四捨五入,fmt爲可選項,如果沒有指定fmt,則默認爲DD’,將date四捨五入爲最近的天。
格式碼:世紀CC,年YY,月MM,日DD,小時HH24,分MI,秒SS
•TRUNC(date[,'fmt'])將date按照fmt指定的格式進行截取,fmt爲可選項,如果沒有指定fmt,則默認爲‘DD’,將date截取爲最近的天。
•EXTRACT:返回從日期類型中取出指定年、月、日

MONTHS_BETWEEN 函數演示——公司員工服務的月數。

SELECT last_name, salary, MONTHS_BETWEEN(SYSDATE,hire_date) months
FROM employees
ORDER BY months;
ADD_MONTHS 函數演示——99年公司員工轉正日期。

SELECT last_name, salary, hire_date, ADD_MONTHS(hire_date,3) new_date

FROM employees

WHERE hire_date>'01-1月-1999';

NEXT_DAY 函數演示——下週一的日期。

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


LAST_DAY 函數演示——06年2月2日所在月份最後一天。
SELECT LAST_DAY('02-2月-2006') "LAST DAY" FROM DUAL;

ROUND函數演示——98年入職員工入職日期按月四捨五入。
SELECT employee_id, hire_date, ROUND(hire_date, 'MONTH') FROM employees WHERE SUBSTR(hire_date,-2,2)='98';

TRUNC 函數演示——98年入職員工入職日期按月截斷。
SELECT employee_id, hire_date, TRUNC(hire_date, 'MONTH') FROM employees WHERE SUBSTR(hire_date,-2,2)='98';

EXTRACT 函數語法
部門編號是90的部門中所有員工入職月份。
EXTRACT ([YEAR] [MONTH][DAY] FROM [日期類型表達式])
SELECT last_name, hire_date, EXTRACT (MONTH FROM HIRE_DATE) MONTH FROM employees WHERE department_id = 90;

6轉換函數

數據類型轉換分爲隱式轉化和顯示轉換

對數據進行隱式轉換

對於INSERT和UPDATE操作,oracle會把插入值或者更新值隱式轉換爲字段的數據類型
–對於SELECT語句,oracle會把字段的數據類型隱式轉換爲變量的數據類型
–當比較一個字符型和數值型的值時,oracle會把字符型的值隱式轉換爲數值型
–當比較字符型和日期型的數據時,oracle會把字符型轉換爲日期型
–用連接操作符(||)時,oracle會把非字符類型的數據轉換爲字符類型
–如果字符類型的數據和非字符類型的數據(如number、date、rowid等)作算術運算,則oracle會將字符類型的數據轉換爲合適的數據類型,這些數據類型可能是number、date、rowid等

數據類型的顯示轉換,通常是在字符類型,日期類型,數字類型直接進行顯示轉換

主要有3個顯性函數

-TO_CHAR

-TO_NUMBER

-TO_DATE

TO_CHAR(date|number [,‘fmt’])把日期類型/數字類型的表達式或列轉換爲字符類型。
–‘fmt’指的是需要顯示的格式:
–需要寫在單引號中,並且是大小寫敏感
–可包含任何有效的日期格式

常用日期格式
–YYYY:4位數字表示年份;
–YY:2位數字表示年份,但是無世紀轉換(與RR區別在後面章節介紹);
–RR:2位數字表示年份,有世紀轉換(與YY區別在後面章節介紹);
–YEAR:年份的英文拼寫;
–MM:兩位數字表示月份;
–MONTH:月份英文拼寫;

–DY:星期的英文前三位字母;
–DAY:星期的英文拼寫;
–D:數字表示一星期的第幾天,星期天是一週的第一天。
–DD:數字表示一個月中的第幾天;
–DDD:數字表示一年中的第幾天。

–AM 或PM:上下午表示;
–HH 或HH12或HH24:數字表示小時。HH12代表12小時計時,HH24代表24小時計時;
–MI:數字表示分鐘;
–SS:數字表示秒;

一些特殊格式
–TH:顯示數字表示的英文序數詞,如:DDTH顯示天數的序數詞。
–SP:顯示數字表示的拼寫。
–SPTH:顯示數字表示的序數詞的拼寫。
–“字符串”:如在格式中顯示字符串,需要兩端加雙引號。
TO_CHAR(SYSDATE,’DDSPTH’)
TO_CHAR(SYSDATE,’DD “of” MONTH ‘)

select to_char(sysdate,'YYYY-MM-DD')
from dual;

TO_NUMBER(char[,’fmt’]) 把字符類型列或表達式轉換爲數字類型。
–使用格式和TO_CHAR中轉換成字符類型中的格式相同


TO_DATE(char[,‘fmt’]) 把字符類型列或表達式轉換爲日期類型。
–格式和TO_CHAR中轉換成字符類型中的格式相同。

具體格式如下:
–9:一位數字;
–0:一位數字或前導零;
–$:顯示爲美元符號;
–L:顯示按照區域設置的本地貨幣符號;
–.:小數點;
–,:千位分割符;

TO_CHAR 函數進行數字到字符型格式轉換
注意:進行數字類型到字符型轉換,格式中的寬度一定要超過實際列寬度,否則會顯示爲###。
SELECT last_name, TO_CHAR(salary, '$99,999.00') salary FROM employees WHERE last_name = 'King';
SELECT last_name, TO_CHAR(salary, '$9,999.00') salary FROM employees WHERE last_name = 'King';

7RR功能


8通用函數

與空值(NULL)相關的一些函數,完成對空值(NULL)的一些操作。主要包括以下函數:
–NVL
–NVL2
–NULLIF
–COALESCE
條件處理函數:
–CASE表達式
–DECODE

NVL (表達式1, 表達式2)函數功能是空值轉換,把空值轉換爲其他值,解決空值問題。表達式1是需要轉換的列或表達式,表達式2是如果第一個參數爲空時,需要轉換的值。
–NVL(comm,0)
–NVL(hire_date,'01-JAN-06')
–NVL(job_id,'No Job Yet')
注意:數據格式可以是日期、字符、數字,但數據類型必須匹配。

NVL2(表達式1, 表達式2, 表達式3)函數是對第一個參數進行檢查。如果第一個參數不爲空,則輸出第二個參數;如果第一個參數爲空,則輸出第三個參數。表達式1可以爲任何數據類型

NULLIF (表達式1, 表達式2)函數主要是完成兩個參數的比較。當兩個參數不相等時,返回值是第一個參數值;當兩個參數相等時,返回值是空值。

COALESCE (表達式1, 表達式2, ... 表達式n)函數是對NVL函數的擴展。COALESCE函數的功能是返回第一個不爲空的參數,參數個數不受限制。

CASE語法
CASE expr WHEN comparison_expr1 THEN return_expr1 [WHEN comparison_expr2 THEN return_expr2 WHEN comparison_exprn THEN return_exprn ELSE else_expr] END

SELECT last_name, commission_pct,

 (CASE commission_pct

    WHEN 0.1 THEN '低'

    WHEN 0.2 THEN '中'

    WHEN 0.3 THEN '高'

     ELSE '無'

 END) Commission

FROM employees

 WHERE commission_pct IS NOT NULL

 ORDER BY last_name;

DECODE(字段|表達式, 條件1,結果1[,條件2,結果2…,][,缺省值])
SELECT last_name, commission_pct, decode(commission_pct, 0.1,'低', 0.2,'中', 0.3 , '高', '無') Commission FROM employees WHERE commission_pct IS NOT NULL ORDER BY last_name;

9嵌套函數

單行函數可以嵌套於任何層。
嵌套的函數是從最裏層向最外層的順序計算的。

SELECT employee_id,manager_id , NVL2(TO_CHAR(manager_id),to_char(manager_id),'No Manager') FROM employees


發佈了45 篇原創文章 · 獲贊 6 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章