本篇文章還是學習《程序員的SQL金典》內容的記錄此次將講解的是SQL SERVER常用的其它函數(其它數據庫這裡就不羅列了想看更多的可以關注《程序員的SQL金典》)
具體的其他函數包括類型轉換的函數空值處理的函數流程控制函數SQL SERVER獨有函數
類型轉換的函數
CAST ( expression AS data_type)函數 CONVERT ( data_type expression)函數
上面兩個函數都是SQL SERVER提供的支持類型轉換的函數參數expression為待進行類型轉換的表達式(即需要待轉換的數據)而data_type為轉換的目標類型(即待轉換後的類型)
SELECT
CAST(;; AS INTEGER) as i
CONVERT(DECIMAL;;) as d
CONVERT(DATETIME; ::;) as dt
空值處理的函數
COALESCE ( expressionvaluevalue……valuen)函數處理空值問題的函數返回包括expression在內的所有參數中的第一個非空表達式其中expression為待檢測的表達式而其後的參數個數不固定可以多個如果expression不為空值則返回expression否則判斷value是否為空如果不為空值則返回value否則判斷value是否為空如果不為空值則返回value……以此類推如果COALESCE函數裡的參數全為NULL就會出錯了因為COALESCE函數的功能其實就是為了避免出現不想要的NULL值
SELECT FNameFBirthDayFRegDay
COALESCE(FBirthDayFRegDay;;) AS ImportDay
FROM T_Person
ISNULL(expressionvalue)函數這個函數也是空值處理的函數是COALESCE( )函數的簡化版只支持兩個參數其中expression為待檢測的表達式如果expression不為空值則返回expression否則判斷value是否為空如果不為空值則返回value如果都為空則返回空
SELECT FBirthDayFRegDay
ISNULL(FBirthDayFRegDay) AS ImportDay
FROM T_Person
NULLIF ( expression expression )函數這個函數也是空值處理的函數主要是判斷兩個表達式是否等價如果等價則返回空如果不等價側返回第一個expression的值需要注意的意第一個表達式expression不能為空
SELECT FBirthDayFRegDay
NULLIF(FBirthDayFRegDay)
FROM T_Person
流程控制函數
SQL SERVER提供了流程控制函數類似於我們代碼裡面的的SWITCH……CASE語句那就是CASE函數這個函數有如下兩種運用方法
CASE函數的語法如下
用法一:
CASE expression
WHEN value THEN returnvalue
WHEN value THEN returnvalue
WHEN value THEN returnvalue
……
ELSE defaultreturnvalue
END
CASE函數對表達式expression進行測試如果expression等於value則返回returnvalue如果expression等於value則返回returnvalueexpression等於value則返回returnvalue……以此類推如果不符合所有的WHEN條件則返回默認值defaultreturnvalue
SELECT
FName
(CASE FName
WHEN Tom THEN GoodBoy
WHEN Lily THEN GoodGirl
WHEN Sam THEN BadBoy
WHEN Kerry THEN BadGirl
ELSE Normal
END) as isgood
FROM T_Person
用法二
CASE
WHEN condition THEN returnvalue
WHEN condition THEN returnvalue
WHEN condition THEN returnvalue
……
ELSE defaultreturnvalue
END
其中的condition condition condition ……為條件表達式CASE函數對各個表達式從前向後進行測試如果條件condition為真則返回returnvalue否則如果條件condition為真則返回returnvalue否則如果條件condition為真則返回returnvalue……以此類推如果不符合所有的WHEN條件則返回默認值defaultreturnvalue
SELECT
FName
FWeight
(CASE
WHEN FWeight< THEN thin
WHEN FWeight> THEN fat
ELSE ok
END) as isnormal
FROM T_Person
SQL SERVER獨有函數
PATINDEX ( ;%pattern%; expression )函數不同於CHARINDEX()函數只能計算字符串中指定表達式的開始位置PATINDEX ( ;%pattern%; expression )函數提供了更加靈活的方式它返回指定表達式中模式;%pattern%;第一次出現的起始位置如果在全部有效的文本和字符數據類型中沒有找到該模式則返回零在模式中可以使用通配符
SELECT FNamePATINDEX(;%_m%;FName)
FROM T_Person
REPLICATE (strcount)函數用來得到一個由子字符串重復了若干次所組成的字符串其中參數str為子字符串而count為重復次數(其實就是一個復制函數)
SELECT FNameFWeight
CAST(FWeight/ AS INT)
REPLICATE(FName CAST(FWeight/ AS INT))
FROM T_Person
REVERSE(expression)函數將一個字符串的順序顛倒
SELECT FName REVERSE(FName)
FROM T_Person
ISDATE(expression)函數用來確定輸入表達式是否為有效日期如果輸入表達式是有效日期那麼ISDATE 返回 否則返回 expression參數為要驗證其是否為日期的表達式expression可以是textntext 表達式和image 表達式以外的任意表達式可以隱式轉換為nvarchar
SELECT
ISDATE(NULL) as d
ISDATE(//) as d
ISDATE(a) as d
ISDATE() as d
ISDATE(//) as d
ISDATE() as d
ISDATE() as d
ISDATE( Abc) as d
ISNUMERIC ( expression )函數用來確定表達式是否為有效的數值類型如果輸入表達式的計算值為有效的整數浮點數money 或decimal 類型時ISNUMERIC 返回 否則返回
SELECT
ISNUMERIC(NULL) as d
ISNUMERIC(//) as d
ISNUMERIC(a) as d
ISNUMERIC() as d
ISNUMERIC(//) as d
ISNUMERIC(E) as d
ISNUMERIC() as d
ISNUMERIC() as d
From:http://tw.wingwit.com/Article/program/SQL/201405/30848.html