本篇文章還是學習《程序員的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 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 2、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