T-SQL是微軟在關(guān)系型數據庫管理系統SQL Server中的SQL-3標準的實(shí)現,是微軟對SQL的擴展,具有SQL的主要特點(diǎn),同時(shí)增加了變量、運算符、函數、流程控制和注釋等語(yǔ)言元素,使得其功能更加強大。并且T-SQL自帶了許多實(shí)用的函數,DBA可以利用這些函數來(lái)進(jìn)行更有效地管理。
T-SQL字符串函數
T-SQL字符串函數---截取字符串的值
下面的一組函數詳細描述了如何截取字符串的一部分。這些函數大部分都包含在下面的SELECT語(yǔ)句中:
可以看到,SELECT語(yǔ)句中包括函數LEFT,SUBSTRING,RIGHT和RTRIM。執行結果:

LEFT函數返回ProductName列的前12個(gè)字符。該函數有兩個(gè)參數:第一個(gè)參數是字符串表達式,第二個(gè)參數是字符數。在這個(gè)例子中,字符串表達式是ProductName列,字符數是“12”。結果,ProductName列所有值的后半部分都被截掉了,只剩下12個(gè)字符返回。
RIGHT函數的用法也是一樣的,它截取字符串右邊的部分。
SUBSTRING函數可以提取字符串的任意部分。該函數有三個(gè)參數:第一個(gè)參數是字符串表達式,第二個(gè)參數是指定從哪里開(kāi)始截取,第三個(gè)參數表示截取多長(cháng)的字符串。在上面的例子中,字符串表達式仍然是ProductName列。第二個(gè)參數“9”的意思是我們應該從第九個(gè)字符開(kāi)始(截取),第三個(gè)參數“4”意思是獲取四個(gè)字符。
RTRIM的功能是去掉字符串(在第一個(gè)參數中指定)尾部的所有空格。RTRIM函數還有與它相對的另一個(gè)函數:LTRIM函數。它會(huì )刪除字符串左側的空格。
T-SQL字符串函數---修改字符串的值
T-SQL還包括可以在SQL Server中修改字符串值的一組函數。下面的語(yǔ)句就是一個(gè)例子:

SELECT語(yǔ)句中包括函數REPALCE,STUFF,REVERSE和REPLICATE,LOWER。執行結果:

函數REPLACE,用來(lái)替換給定字符串值中指定的一組字符串為新的字符串。該函數有三個(gè)參數:第一個(gè)參數是字符串表達式,第二個(gè)參數是被替換的字符串,第三個(gè)參數是要替換的新字符串。
函數STUFF,它的作用是按照給定的位置刪除一組指定的字符,并插入一組新的字符。該函數有四個(gè)參數:第一個(gè)參數是待操作的字符串表達式,第二個(gè)參數是待刪除的字符串的起始位置,第三個(gè)參數是要刪除字符的數量,第四個(gè)參數是要插入的字符串。在上面的例子中,STUFF函數指定ProductName列為待操作的字符串。要刪除的字符串從第11個(gè)字符(第二個(gè)參數)開(kāi)始,刪除兩個(gè)字符(第三個(gè)參數)。在那些字符刪除后,新字符(x01)被插入到該位置。
函數RESERVSE的作用是:把給定字符串按逆序排列。
函數REPLICATE,該函數可以把指定字符串值重復指定的次數。該函數有兩個(gè)參數:第一個(gè)參數是待處理的字符串值,第二個(gè)參數是重復次數。在上面的例子中,“0”被重復了三次。
函數SPACE與函數REPLICATE類(lèi)似,它返回一組空格。該函數有一個(gè)參數,指定返回的空格數量。
函數LOWER,很簡(jiǎn)單,它把字符串中的大寫(xiě)字符轉換為小寫(xiě)字符。
T-SQL字符串函數---轉換字符串值
T-SQL提供可以轉換字符串值的函數,如下面的SELECT語(yǔ)句所示:
SELECT語(yǔ)句中包括函數CHAR,STR,ASCII和RTRIM,UNICODE。執行結果:

第一個(gè)函數是CHAR,可以把一個(gè)ASCII碼整數(從0到255)轉換為字符,該函數只有一個(gè)參數(一個(gè)ASCII碼整數值)。該函數在給你的字符串插入控制字符時(shí)非常方便,比如tab鍵(ASCII碼為9),換行符號(ASCII碼為10)或者回車(chē)符(ASCII碼為13)。
函數STR,它可以把數值型數據轉換為字符型數據。STR函數的參數是待轉換的數值型表達式。
T-SQL還支持ASCII函數,可以轉換單個(gè)字符為ASCII碼整數。
UNICODE函數,該函數用來(lái)把一個(gè)字符轉換為Unicode整數。該函數只有一個(gè)參數:Unicode字符表達式。
T-SQL字符串函數---獲取字符串的相關(guān)信息
還有一些函數可以提供與字符串有關(guān)的信息,比如字符串長(cháng)度或者值內部子串的位置。下面的SELECT語(yǔ)句就演示了幾個(gè)提供字符串相關(guān)信息的函數:
SELECT語(yǔ)句中包括函數CHAR,STR,ASCII和RTRIM,UNICODE。執行結果:

函數LEN返回指定字符串的字符數量。該函數只有唯一參數就是待計數的字符串。
函數CHARINDEX的功能是從某字符串中指定的開(kāi)始位置查找某字符串所在位置。該函數有三個(gè)參數:第一個(gè)參數是要搜索的字符串,第二個(gè)參數是待搜索范圍字符串,第三個(gè)參數是搜索開(kāi)始的位置。最后一個(gè)參數是可選的。在上面的例子中,我們在ProductName列中搜索Bob第一次出現的位置,它是從字符串的第7個(gè)位置開(kāi)始的。
函數PATINDEX。該函數在字符串中搜索第一次出現某字符串的位置。該函數有兩個(gè)參數:第一個(gè)參數是要匹配的字符串,第二個(gè)參數是在其中進(jìn)行搜索的字符串??梢杂猛ㄅ浞x匹配模式,提供靈活的搜索模式類(lèi)型。然而,如果你使用通配符“%”,你必須在待搜索字符的前面或者后面都加上它,除非你搜索以指定字符串開(kāi)頭或結尾的匹配。例如,在上面的語(yǔ)句中,“%Pears%”被指定為在ProductName值中搜索的匹配模式。結果顯示,第一次匹配的實(shí)例在第27個(gè)字符位置。
T-SQL集合函數
T-SQL集合函數---基礎函數
在操作SQL Server數據庫中的數據時(shí),有時(shí)你可能會(huì )需要對一組數值執行計算。此處灰?;A,就不過(guò)多說(shuō)了。
MAX函數:最大值函數。MIN函數:最小值函數。AVG函數:平均值函數。SUM函數:求和函數。COUNT函數:總計函數。
利用集合函數處理分組數據的時(shí)候,可以使用ROLLUP,CUBE或者GOURPING SETS操作符來(lái)指定包含在結果集中的附加統計數據。
T-SQL集合函數---獲取統計數據
SQL Server有四個(gè)集合函數可以支持你對數值型列的一組值做數據統計:
STDEV:返回值的統計標準方差。
STDEVP:返回總體值的統計標準方差。
VAR:返回值的統計方差。
VARP:返回總體值的統計方差。
執行結果:

T-SQL 系統函數
SQL Server內建有可以支持你執行各種任務(wù)的函數,比如轉換數據,操作字符串值,以及執行數學(xué)計算的函數。一些SQL Server函數被歸類(lèi)為系統函數,這些函數支持你查看關(guān)于更新和插入操作的信息,提取服務(wù)器屬性設置,訪(fǎng)問(wèn)當前會(huì )話(huà)及其用戶(hù)的詳細信息。你還可以利用系統函數執行許多語(yǔ)言相關(guān)的任務(wù)。
T-SQL系統函數---查看有關(guān)數據修改的信息
SQL Server的一些系統函數支持獲取你的更新和插入操作的明細信息。例如,你可以獲取插入到某個(gè)表中的最后一個(gè)標識值,或者對某個(gè)表增加或者更新的行數。要展示這些函數如何使用,我定義了下面的表并給它填充了幾行數據:

現在,我們來(lái)看一個(gè)例子,其中使用了幾個(gè)系統函數提取關(guān)于剛插入上面那個(gè)表的數據相關(guān)的信息。下面的“SELECT語(yǔ)句”包括五個(gè)函數,其中三個(gè)與身份列值有關(guān),而另兩個(gè)與行數有關(guān):
執行結果:

第一個(gè)函數是IDENT_CURRENT,它提取插入表“TableA”的最后一個(gè)身份值。如你所見(jiàn),表“TableA”被指定為該函數的一個(gè)入參。該函數返回的信息與添加數據時(shí)的會(huì )話(huà)無(wú)關(guān),也與添加時(shí)執行的語(yǔ)句范圍無(wú)關(guān)。這一點(diǎn)非常重要,因為SQL Server支持其他身份相關(guān)的函數,包括專(zhuān)門(mén)針對當前會(huì )話(huà)(@@IDENTITY)和當前范圍和會(huì )話(huà)(SCOPE_IDENTITY)的函數。
IDENT_SEED函數返回起始值,而IDENT_INCR函數返回增量值。
@@ROWCOUNT 函數返回最后一個(gè)語(yǔ)句影響的行數?!癛OWCOUNT_BIG”函數也做同樣的事情,唯一區別是返回值類(lèi)型是bigint。如果你預計影響的行數會(huì )多于20億條數據,你應該使用這個(gè)函數。要注意,這兩個(gè)函數都不是關(guān)聯(lián)于某個(gè)表的,因為這兩個(gè)函數基于最后一條執行的語(yǔ)句獲取數據。
T-SQL系統函數---查看服務(wù)器屬性
有時(shí),你可能想要檢索特定的服務(wù)器屬性值,這種情況下,你可以使用“SERVERPROPERTY”函數。該函數有一個(gè)參數(屬性名稱(chēng)),請看下面的示例:
在這個(gè)“SELECT”語(yǔ)句中,我檢索了“Edition”,“InstanceName ”和“Collation ”屬性的設置,它們以參數的形式傳遞到函數中。該“SELECT”語(yǔ)句返回下面結果:

聯(lián)系客服