本篇文章仍是學習《程序員的SQL金典》內容的記錄,這次將講解的是SQL SERVER經常使用的其它函數。(其它數據庫這裏就不羅列了,想看更多的能夠關注《程序員的SQL金典》)。程序員
具體的其餘函數包括:類型轉換的函數、空值處理的函數、流程控制函數、SQL SERVER獨有函數。數據庫
類型轉換的函數 |
CAST ( expression AS data_type)函數 CONVERT ( data_type, expression)函數express
上面兩個函數都是SQL SERVER提供的支持類型轉換的函數。參數expression爲待進行類型轉換的表達式(即須要待轉換的數據),而data_type爲轉換的目標類型(即待轉換後的類型)。函數
SELECT CAST('-30' AS INTEGER) as i, CONVERT(DECIMAL,'3.1415726') as d, CONVERT(DATETIME,'2008-08-08 08:09:10') as dt
空值處理的函數 |
COALESCE ( expression,value1,value2……,valuen)函數:處理空值問題的函數,返回包括expression在內的全部參數中的第一個非空表達式。其中expression爲待檢測的表達式,而其後的參數個數不固定,能夠多個。若是expression不爲空值則返回expression;不然判斷value1是否爲空,若是不爲空值則返回value1;不然判斷value2是否爲空,若是不爲空值則返回value2;……以此類推,若是COALESCE函數裏的參數全爲NULL就會出錯了,由於COALESCE函數的功能其實就是爲了不出現不想要的NULL值。學習
SELECT FName,FBirthDay,FRegDay, COALESCE(FBirthDay,FRegDay,'2008-08-08') AS ImportDay FROM T_Person
ISNULL(expression,value)函數:這個函數也是空值處理的函數,是COALESCE( )函數的簡化版,只支持兩個參數。其中expression爲待檢測的表達式,若是expression不爲空值則返回expression,不然判斷value是否爲空,若是不爲空值則返回value,若是都爲空,則返回空。測試
SELECT FBirthDay,FRegDay, ISNULL(FBirthDay,FRegDay) AS ImportDay FROM T_Person
NULLIF ( expression1 , expression2 )函數:這個函數也是空值處理的函數,主要是判斷兩個表達式是否等價,若是等價,則返回空,若是不等價,側返回第一個expression1的值。須要注意的意,第一個表達式expression1不能爲空。spa
SELECT FBirthDay,FRegDay, NULLIF(FBirthDay,FRegDay) FROM T_Person
流程控制函數 |
SQL SERVER提供了流程控制函數,相似於咱們代碼裏面的的SWITCH……CASE語句。那就是CASE函數,這個函數有以下兩種運用方法。code
CASE函數的語法以下:orm
用法一:blog
CASE expression
WHEN value1 THEN returnvalue1
WHEN value2 THEN returnvalue2
WHEN value3 THEN returnvalue3
……
ELSE defaultreturnvalue
END
CASE函數對錶達式expression進行測試,若是expression等於value1則返回returnvalue1,若是expression等於value2則返回returnvalue2,expression等於value3則返回returnvalue3,……以此類推,若是不符合全部的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 condition1 THEN returnvalue1 WHEN condition 2 THEN returnvalue2 WHEN condition 3 THEN returnvalue3 …… ELSE defaultreturnvalue END
其中的condition1 、condition 二、condition 3……爲條件表達式,CASE函數對各個表達式從前向後進行測試,若是條件condition1爲真則返回returnvalue1,不然若是條件condition2爲真則返回returnvalue2,不然若是條件condition3爲真則返回returnvalue3,……以此類推,若是不符合全部的WHEN條件,則返回默認值defaultreturnvalue。
SELECT FName, FWeight, (CASE WHEN FWeight<40 THEN 'thin' WHEN FWeight>50 THEN 'fat' ELSE 'ok' END) as isnormal FROM T_Person
SQL SERVER獨有函數 |
PATINDEX ( '%pattern%' , expression )函數:不一樣於CHARINDEX()函數,只能計算字符串中指定表達式的開始位置。PATINDEX ( '%pattern%' , expression )函數提供了更加靈活的方式,它返回指定表達式中模式'%pattern%'第一次出現的起始位置;若是在所有有效的文本和字符數據類型中沒有找到該模式,則返回零。在模式中可使用通配符。
SELECT FName,PATINDEX('%_m%',FName) FROM T_Person
REPLICATE (str,count)函數:用來獲得一個由子字符串重複了若干次所組成的字符串,其中參數str爲子字符串,而count爲重複次數。(其實就是一個複製函數)。
SELECT FName,FWeight, CAST(FWeight/20 AS INT), REPLICATE(FName, CAST(FWeight/20 AS INT)) FROM T_Person
REVERSE(expression)函數:將一個字符串的順序顛倒。
SELECT FName, REVERSE(FName) FROM T_Person
ISDATE(expression)函數:用來肯定輸入表達式是否爲有效日期。若是輸入表達式是有效日期,那麼ISDATE 返回 1;不然,返回 0。expression參數爲要驗證其是否爲日期的表達式。expression能夠是text、ntext 表達式和image 表達式之外的任意表達式,能夠隱式轉換爲nvarchar。
SELECT ISDATE(NULL) as d1, ISDATE('13/43/3425') as d2, ISDATE('1995-10-1a') as d3, ISDATE(19920808) as d4, ISDATE('1/23/95') as d5, ISDATE('1995-10-1') as d6, ISDATE('19920808') as d7, ISDATE(' Abc') as d8
ISNUMERIC ( expression )函數:用來肯定表達式是否爲有效的數值類型。若是輸入表達式的計算值爲有效的整數、浮點數、money 或decimal 類型時,ISNUMERIC 返回 1;不然返回 0。
SELECT ISNUMERIC(NULL) as d1, ISNUMERIC('13/43/3425') as d2, ISNUMERIC('30a.8') as d3, ISNUMERIC(19920808) as d4, ISNUMERIC('1/23/95') as d5, ISNUMERIC('3E-3') as d6, ISNUMERIC('19920808') as d7, ISNUMERIC('-30.3') as d8