SQL SERVER其它函數

本篇文章仍是學習《程序員的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
相關文章
相關標籤/搜索