本篇文章還是學習《程式員的SQL金典》內容的記錄,此次將講解的是SQL SERVER常用的其它函數。 (其它資料庫這裡就不羅列了,想看更多的可以關注《程式員的SQL金典》)。
具體的其他函數包括:類型轉換的函數、空值處理的函數、流程式控制制函數、SQL SERVER專屬函數。
類型轉換的函數
CAST ( expression AS data_type)函數 CONVERT ( data_type, expression)函數
上面兩個函數都是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不可為空。
SELECT FBirthDay,FRegDay,
NULLIF(FBirthDay,FRegDay)
FROM T_Person
流程式控制制函數
SQL SERVER提供了流程式控制制函數,類似於我們代碼裡面的的SWITCH……CASE語句。那就 是CASE函數,這個函數有如下兩種運用方法。
CASE函數的文法如下:
用法一:
CASE expressionWHEN value1 THEN returnvalue1WHEN value2 THEN returnvalue2WHEN value3 THEN returnvalue3……ELSE defaultreturnvalueEND
CASE函數對錶達式expression進行測試,如果expression等於value1則返回returnvalue1,如果 expression等於value2則返回returnvalue2,expression等於value3則返回returnvalue3, ……以此類推,如果不符合所有的WHEN條件,則返回預設值defaultreturnvalue。
SELECTFName,(CASE FNameWHEN 'Tom' THEN 'GoodBoy'WHEN 'Lily' THEN 'GoodGirl'WHEN 'Sam' THEN 'BadBoy'WHEN 'Kerry' THEN 'BadGirl'ELSE 'Normal'END) as isgoodFROM T_Person
用法二:
CASEWHEN condition1 THEN returnvalue1WHEN condition 2 THEN returnvalue2WHEN condition 3 THEN returnvalue3……ELSE defaultreturnvalueEND
其中的condition1 、condition 2、condition 3……為條件運算式,CASE函數對各個 運算式從前向後進行測試,如果條件condition1為真則返回returnvalue1,否則如果條件condition2為 真則返回returnvalue2,否則如果條件condition3為真則返回returnvalue3,……以此類 推,如果不符合所有的WHEN條件,則返回預設值defaultreturnvalue。
SELECTFName,FWeight,(CASEWHEN FWeight<40 THEN 'thin'WHEN FWeight>50 THEN 'fat'ELSE 'ok'END) as isnormalFROM T_Person