|
T-SQL是微軟在關系型數(shù)據(jù)庫管理系統(tǒng)SQL Server中的SQL-3標準的實現(xiàn),是微軟對SQL的擴展,具有SQL的主要特點,同時增加了變量、運算符、函數(shù)、流程控制和注釋等語言元素,使得其功能更加強大。并且T-SQL自帶了許多實用的函數(shù),DBA可以利用這些函數(shù)來進行更有效地管理。 T-SQL字符串函數(shù) T-SQL字符串函數(shù)---截取字符串的值 下面的一組函數(shù)詳細描述了如何截取字符串的一部分。這些函數(shù)大部分都包含在下面的SELECT語句中: SELECT ProductName, LEFT(ProductName, 12) AS A, SUBSTRING(ProductName, 9, 4) AS B, RIGHT(ProductName, 2) AS C, RTRIM(ProductName) AS D FROM Products 可以看到,SELECT語句中包括函數(shù)LEFT,SUBSTRING,RIGHT和RTRIM。執(zhí)行結果:
LEFT函數(shù)返回ProductName列的前12個字符。該函數(shù)有兩個參數(shù):第一個參數(shù)是字符串表達式,第二個參數(shù)是字符數(shù)。在這個例子中,字符串表達式是ProductName列,字符數(shù)是“12”。結果,ProductName列所有值的后半部分都被截掉了,只剩下12個字符返回。 RIGHT函數(shù)的用法也是一樣的,它截取字符串右邊的部分。 SUBSTRING函數(shù)可以提取字符串的任意部分。該函數(shù)有三個參數(shù):第一個參數(shù)是字符串表達式,第二個參數(shù)是指定從哪里開始截取,第三個參數(shù)表示截取多長的字符串。在上面的例子中,字符串表達式仍然是ProductName列。第二個參數(shù)“9”的意思是我們應該從第九個字符開始(截取),第三個參數(shù)“4”意思是獲取四個字符。 RTRIM的功能是去掉字符串(在第一個參數(shù)中指定)尾部的所有空格。RTRIM函數(shù)還有與它相對的另一個函數(shù):LTRIM函數(shù)。它會刪除字符串左側的空格。 T-SQL字符串函數(shù)---修改字符串的值 T-SQL還包括可以在SQL Server中修改字符串值的一組函數(shù)。下面的語句就是一個例子: 代碼
SELECT REPLACE(ProductName, 'Mountain', 'Mtn') AS ReplaceName, STUFF(ProductName, 11, 2, 'x01') AS StuffName, REVERSE(ProductName) AS ReverseNum, STUFF(ProductName, 1, 2, REPLICATE(0, 3)) AS ReplicateNum, ProductName + SPACE(4) + LOWER (ProductName) AS LowerProdLine FROM Products SELECT語句中包括函數(shù)REPALCE,STUFF,REVERSE和REPLICATE,LOWER。執(zhí)行結果:
函數(shù)REPLACE,用來替換給定字符串值中指定的一組字符串為新的字符串。該函數(shù)有三個參數(shù):第一個參數(shù)是字符串表達式,第二個參數(shù)是被替換的字符串,第三個參數(shù)是要替換的新字符串。 函數(shù)STUFF,它的作用是按照給定的位置刪除一組指定的字符,并插入一組新的字符。該函數(shù)有四個參數(shù):第一個參數(shù)是待操作的字符串表達式,第二個參數(shù)是待刪除的字符串的起始位置,第三個參數(shù)是要刪除字符的數(shù)量,第四個參數(shù)是要插入的字符串。在上面的例子中,STUFF函數(shù)指定ProductName列為待操作的字符串。要刪除的字符串從第11個字符(第二個參數(shù))開始,刪除兩個字符(第三個參數(shù))。在那些字符刪除后,新字符(x01)被插入到該位置。 函數(shù)RESERVSE的作用是:把給定字符串按逆序排列。 函數(shù)REPLICATE,該函數(shù)可以把指定字符串值重復指定的次數(shù)。該函數(shù)有兩個參數(shù):第一個參數(shù)是待處理的字符串值,第二個參數(shù)是重復次數(shù)。在上面的例子中,“0”被重復了三次。 函數(shù)SPACE與函數(shù)REPLICATE類似,它返回一組空格。該函數(shù)有一個參數(shù),指定返回的空格數(shù)量。 函數(shù)LOWER,很簡單,它把字符串中的大寫字符轉(zhuǎn)換為小寫字符。 T-SQL字符串函數(shù)---轉(zhuǎn)換字符串值 T-SQL提供可以轉(zhuǎn)換字符串值的函數(shù),如下面的SELECT語句所示: SELECT ProductName + CHAR(9) + STR(ProductID) AS Product, ASCII(ProductName) AsciiProductName, RTRIM(ProductName) AS ProductName, UNICODE(RTRIM(ProductName)) AS UnicodeProductName FROM Products SELECT語句中包括函數(shù)CHAR,STR,ASCII和RTRIM,UNICODE。執(zhí)行結果:
第一個函數(shù)是CHAR,可以把一個ASCII碼整數(shù)(從0到255)轉(zhuǎn)換為字符,該函數(shù)只有一個參數(shù)(一個ASCII碼整數(shù)值)。該函數(shù)在給你的字符串插入控制字符時非常方便,比如tab鍵(ASCII碼為9),換行符號(ASCII碼為10)或者回車符(ASCII碼為13)。 函數(shù)STR,它可以把數(shù)值型數(shù)據(jù)轉(zhuǎn)換為字符型數(shù)據(jù)。STR函數(shù)的參數(shù)是待轉(zhuǎn)換的數(shù)值型表達式。 T-SQL還支持ASCII函數(shù),可以轉(zhuǎn)換單個字符為ASCII碼整數(shù)。 UNICODE函數(shù),該函數(shù)用來把一個字符轉(zhuǎn)換為Unicode整數(shù)。該函數(shù)只有一個參數(shù):Unicode字符表達式。 T-SQL字符串函數(shù)---獲取字符串的相關信息 還有一些函數(shù)可以提供與字符串有關的信息,比如字符串長度或者值內(nèi)部子串的位置。下面的SELECT語句就演示了幾個提供字符串相關信息的函數(shù): SELECT LEN(ProductName) AS LengthProductName, CHARINDEX('Bob', ProductName) AS CharIndexProductName, PATINDEX('%Pears%', ProductName) AS PatIndexProductName FROM Products WHERE ProductID=7 SELECT語句中包括函數(shù)CHAR,STR,ASCII和RTRIM,UNICODE。執(zhí)行結果:
函數(shù)LEN返回指定字符串的字符數(shù)量。該函數(shù)只有唯一參數(shù)就是待計數(shù)的字符串。 函數(shù)CHARINDEX的功能是從某字符串中指定的開始位置查找某字符串所在位置。該函數(shù)有三個參數(shù):第一個參數(shù)是要搜索的字符串,第二個參數(shù)是待搜索范圍字符串,第三個參數(shù)是搜索開始的位置。最后一個參數(shù)是可選的。在上面的例子中,我們在ProductName列中搜索Bob第一次出現(xiàn)的位置,它是從字符串的第7個位置開始的。 函數(shù)PATINDEX。該函數(shù)在字符串中搜索第一次出現(xiàn)某字符串的位置。該函數(shù)有兩個參數(shù):第一個參數(shù)是要匹配的字符串,第二個參數(shù)是在其中進行搜索的字符串??梢杂猛ㄅ浞x匹配模式,提供靈活的搜索模式類型。然而,如果你使用通配符“%”,你必須在待搜索字符的前面或者后面都加上它,除非你搜索以指定字符串開頭或結尾的匹配。例如,在上面的語句中,“%Pears%”被指定為在ProductName值中搜索的匹配模式。結果顯示,第一次匹配的實例在第27個字符位置。 T-SQL集合函數(shù) T-SQL集合函數(shù)---基礎函數(shù) 在操作SQL Server數(shù)據(jù)庫中的數(shù)據(jù)時,有時你可能會需要對一組數(shù)值執(zhí)行計算。此處灰?;A,就不過多說了。 MAX函數(shù):最大值函數(shù)。MIN函數(shù):最小值函數(shù)。AVG函數(shù):平均值函數(shù)。SUM函數(shù):求和函數(shù)。COUNT函數(shù):總計函數(shù)。 利用集合函數(shù)處理分組數(shù)據(jù)的時候,可以使用ROLLUP,CUBE或者GOURPING SETS操作符來指定包含在結果集中的附加統(tǒng)計數(shù)據(jù)。 T-SQL集合函數(shù)---獲取統(tǒng)計數(shù)據(jù) SQL Server有四個集合函數(shù)可以支持你對數(shù)值型列的一組值做數(shù)據(jù)統(tǒng)計: STDEV:返回值的統(tǒng)計標準方差。 SELECT STDEV(UnitPrice) AS StdevPrice, STDEVP(UnitPrice) AS StdevpPrice, VAR(UnitPrice) AS VarPrice, VARP(UnitPrice) AS VarpPrice FROM Products 執(zhí)行結果:
T-SQL 系統(tǒng)函數(shù) SQL Server內(nèi)建有可以支持你執(zhí)行各種任務的函數(shù),比如轉(zhuǎn)換數(shù)據(jù),操作字符串值,以及執(zhí)行數(shù)學計算的函數(shù)。一些SQL Server函數(shù)被歸類為系統(tǒng)函數(shù),這些函數(shù)支持你查看關于更新和插入操作的信息,提取服務器屬性設置,訪問當前會話及其用戶的詳細信息。你還可以利用系統(tǒng)函數(shù)執(zhí)行許多語言相關的任務。 T-SQL系統(tǒng)函數(shù)---查看有關數(shù)據(jù)修改的信息 SQL Server的一些系統(tǒng)函數(shù)支持獲取你的更新和插入操作的明細信息。例如,你可以獲取插入到某個表中的最后一個標識值,或者對某個表增加或者更新的行數(shù)。要展示這些函數(shù)如何使用,我定義了下面的表并給它填充了幾行數(shù)據(jù): 代碼
USE Northwind; IF OBJECT_ID('TableA', 'U') IS NOT NULL DROP TABLE dbo.TableA; CREATE TABLE dbo.TableA ( ColA INT IDENTITY(101, 100) NOT NULL, ColB VARCHAR(20) NOT NULL ); INSERT INTO TableA (ColB) VALUES('red'); INSERT INTO TableA (ColB) VALUES('blue'); INSERT INTO TableA (ColB) VALUES('green'); INSERT INTO TableA (ColB) VALUES('yellow'); INSERT INTO TableA (ColB) VALUES('orange'); SELECT * FROM TableA; 現(xiàn)在,我們來看一個例子,其中使用了幾個系統(tǒng)函數(shù)提取關于剛插入上面那個表的數(shù)據(jù)相關的信息。下面的“SELECT語句”包括五個函數(shù),其中三個與身份列值有關,而另兩個與行數(shù)有關: SELECT IDENT_CURRENT('TableA') AS LastValue, IDENT_SEED('TableA') AS SeedValue, IDENT_INCR('TableA') AS IncrValue, @@ROWCOUNT AS RowsAffected, ROWCOUNT_BIG() AS BigRowsAffected; 執(zhí)行結果:
第一個函數(shù)是IDENT_CURRENT,它提取插入表“TableA”的最后一個身份值。如你所見,表“TableA”被指定為該函數(shù)的一個入?yún)?。該函?shù)返回的信息與添加數(shù)據(jù)時的會話無關,也與添加時執(zhí)行的語句范圍無關。這一點非常重要,因為SQL Server支持其他身份相關的函數(shù),包括專門針對當前會話(@@IDENTITY)和當前范圍和會話(SCOPE_IDENTITY)的函數(shù)。 IDENT_SEED函數(shù)返回起始值,而IDENT_INCR函數(shù)返回增量值。 @@ROWCOUNT 函數(shù)返回最后一個語句影響的行數(shù)?!癛OWCOUNT_BIG”函數(shù)也做同樣的事情,唯一區(qū)別是返回值類型是bigint。如果你預計影響的行數(shù)會多于20億條數(shù)據(jù),你應該使用這個函數(shù)。要注意,這兩個函數(shù)都不是關聯(lián)于某個表的,因為這兩個函數(shù)基于最后一條執(zhí)行的語句獲取數(shù)據(jù)。 T-SQL系統(tǒng)函數(shù)---查看服務器屬性 有時,你可能想要檢索特定的服務器屬性值,這種情況下,你可以使用“SERVERPROPERTY”函數(shù)。該函數(shù)有一個參數(shù)(屬性名稱),請看下面的示例: SELECT SERVERPROPERTY('Edition') AS SrvEdition, SERVERPROPERTY('InstanceName') AS SrvInstance, SERVERPROPERTY('Collation') AS SrvCollation; 在這個“SELECT”語句中,我檢索了“Edition”,“InstanceName ”和“Collation ”屬性的設置,它們以參數(shù)的形式傳遞到函數(shù)中。該“SELECT”語句返回下面結果:
|
|
|
來自: wwwijhyt圖書館 > 《數(shù)據(jù)庫》