像普通編程語言同樣,SQL也支持使用函數處理數據,函數使用若干字段名或者常量值作爲參數;參數的數量是不固定的,有的函數的參數爲空,甚至有的函數的參數個數可變;幾乎全部函數都有返回值,返回值即爲函數的數據處理結果。java
其實在前面的章節中咱們已經用到函數了,最典型的就是「聚合函數」,「聚合函數」是函數的一種,它們能夠對一組數據進行統計計算。除了「聚合函數」,SQL中還有其餘類型的函數,好比進行數值處理的數學函數、進行日期處理的日期函數、進行字符串處理的字符串函數等。數據庫
咱們來演示幾個函數使用的典型場景。編程
主流數據庫系統都提供了計算字符串長度的函數,在MYSQL、Oracle、DB2中這個函數名稱爲LENGTH,而在MSSQLServer中這個函數的名稱則爲LEN。這個函數接受一個字符串類型的字段值作爲參數,返回值爲這個字符串的長度。下面的SQL語句計算每個名稱不爲空的員工的名字以及名字的長度:編程語言
MYSQL、Oracle、DB2:函數
SELECT FName, LENGTH(FName) AS namelength FROM T_Employee WHERE FName IS NOT NULL
MSSQLServer:spa
SELECT FName, LEN(FName) AS namelength FROM T_Employee WHERE FName IS NOT NULL
執行完畢咱們就能在輸出結果中看到下面的執行結果:code
FName namelength Tom 3 Jerry 5 Jane 4 Tina 4 Smith 5 John 4 Kerry 5 Stone 5
主流系統都提供了取得字符串的子串的函數,在MYSQL、MSSQLServer中這個函數名稱爲SUBSTRING,而在Oracle、DB2這個函數名稱爲SUBSTR。這個函數接受三個參數,第一個參數爲要取的主字符串,第二個參數爲字串的起始位置(從1開始計數),第三個參數爲字串的長度。下面的SQL語句取得每個名稱不爲空的員工的名字以及名字中從第二個字符開始、長度爲3的字串:字符串
MYSQL、MSSQLServer:字符串處理
SELECT FName, SUBSTRING(FName,2,3) FROM T_Employee WHERE FName IS NOT NULL
Oracle、DB2:數學
SELECT FName, SUBSTR(FName,2,3) FROM T_Employee WHERE FName IS NOT NULL
執行完畢咱們就能在輸出結果中看到下面的執行結果:
FName namelength
Tom om
Jerry er
Jane an
Tina in Smith mi John oh Kerry er Stone to
多個函數還能夠嵌套使用。主流系統都提供了計算正弦函數值的函數SIN和計算絕對值的函數ABS,它們都接受一個數值類型的參數。下面的SQL語句取得每一個員工的姓名、年齡、年齡的正弦函數值以及年齡的正弦函數值的絕對值,其中計算「年齡的正弦函數值的絕對值」時就要使用嵌套函數,SQL語句以下:
SELECT FName,FAge, SIN(FAge) , ABS(SIN(FAge)) FROM T_Employee