SQL Server2012 T-SQL基礎教程(二)

bitsman發表於2017-04-18

字串操作函式

1.拼接字串

拼接字串可以通過 + 來實現拼接,使用這個方法存在一個缺點,當需要拼接的字串為NULL時,由於T-SQL中定義NULL + NULL 仍然為 NULL,所以導致拼接結果出錯。當然也可以在拼接字串的時候使用ISNULL方法提供預設值。

SELECT firstname + ` `+ lastname FROM  dbo.A  --假設輸出 "Name 非白即黑" 
#當lastname 為 NULL時
SELECT  firstname + ` `+ ISNULL(lastname,``) FROM dbo.A --輸出 "Name "

使用CONCAT函式,他可以接受要拼接的字串,當字串中存在NULL時,會自動將NULL替換為空字串。

SELECT CONCAT(`Name:` ,NULL , N`非白即黑`) --輸出 `Name:非白即黑`

2.計算字串的長度和所佔的位元組數

使用LEN函式計算字串的長度,不計算字串末位的空格數量

SELECT LEN(`AABBCCDD  `) --輸出 `8`

使用DATALENGTH函式計算字串所佔的位元組數,末位空格也算。

SELECT DATALENGTH(`AABBCCDD `) --輸出 `9`
SELECT DATALENGTH(`你好 `) --輸出 `5`
SELECT DATALENGTH(N`你好A `) --輸出 `8`

3.替換字串中的指定字元

REPLACE函式可以實現對字串中指定的字元進行替換

SELECT REPLACE(N`非白即黑`,N`非白`,N`Name:非白`) --輸出 `Name:非白即黑`

此方法可以計算某一個字元或者是字串在目標字串中出現的次數

SELECT LEN(`AABBCCDD`) - LEN(REPLACE(`AABBCCDD`,`A`,``)) --輸出 `2`

4.型別轉換

CAST函式實現對字串的型別轉換。

SELECT CAST(`123` AS INT) --輸出 `123`,當型別轉化失敗的時候,丟擲異常.

5.計算字串在目標字串中的位置

CHARINDEX函式實現計算字串第一次出現的位置

SELECT CHARINDEX(`,NAME1,`,`,NAME1,AGE1,SEX1,`) --輸出`1`,當結果為0的時表示所要查詢的字串不在目標字串當中。

此函式可以用於實現批量刪除

DELETE FROM dbo.A WHERE CHARINDEX(`,`+CAST(id as varchar(10))+`,`,@idstr) > 0
--其中@idstr為`,1,2,3,4,5,6,7,`....

6.擷取子字串

SUBSTRING函式可以從一個字串中擷取一個子字串。

SELECT SUBSTRING(`ABCDEFG`,1,5)    --輸出 ’ABCDE’
#位置從1開始,擷取長度為5,如果所擷取的數量超出了輸入字串的末尾,不會引發錯誤,會直接擷取到末尾
SELECT SUBSTRING(`ABCDEFG`,1,100)  --輸出 ‘ABCDEFG’

7.從字串兩側返回指定數量的字串,類似於SUBSTRING的快捷方式

LEFT函式返回字串左側指定數量的字串

SELECT LEFT(`ABCDEFG`,3) --輸出‘ABC’

RIGHT函式返回字串右側指定數量的字串

SELECT RIGHT(`ABCDEFG`,3) --輸出‘EFG’

8.查詢符合某個模式的字串在目標字串中的位置

PATINDEX函式返回模式在字串中第一次出現的位置。

SELECT PATINDEX(`%[A-E]%`,`123ABC456`) --輸出‘4’
#第一個引數模式,類似於正則表達,但是在T-SQL中還是和正規表示式有區別的,總之大同小異。

9.按照指定次數重複一個字串

REPLICATE函式可以按照指定的次數重複一個字串

SELECT REPLICATE(`ABC`,3) --輸出‘ABCABCABC’

10.從目標字串中移除指定字串,並插入一個替代的新子字串。

STUFF函式可以移除字串並插入新的字串代替

SELECT STUFF(`ABCDEFG`,2,3,`HI`) --輸出 ‘AHIEFG’
#若想在某個字元之後插入新的字元,可以設定移除0個字元
SELECT STUFF(`ABCDEFG`,2,0,`HIJ`) --輸出 ‘AHIJBCDEFG’
#在指定位置之前開始算移除的個數,所以是在第一個字元之後插入的。

11.轉換大小寫

UPPER函式轉化字串為大寫

SELECT UPPER(`abcdeFG`) --輸出‘ABCDEFG’

LOWER函式轉化字串為小寫

SELECT LOWER(`abcdeFG`) --輸出‘abcdefg’

12.去掉字串兩側的空格

LTRIM函式去掉字串左側的空格

SELECT LTRIM(`  ABCDEFG`) --輸出‘ABCDEFG’

RTRIM函式去掉字串右側的空格

SELECT RTRIM(`ABCDEFG  `) --輸出‘ABCDEFG’

要想去掉兩側的空格

SELECT LTRIM(RTRIM(`  ABCDEFG  `)) --輸出 ‘ABCDEFG’

13.模糊匹配

LIKE謂詞可以實現模糊匹配,模糊匹配的規則如下(類似於正規表示式):

1) %匹配任意多個字元。
2)_匹配一個字元
3)[<charset>]匹配字符集合中的一個
4)[<char1>-<char2>]匹配字元char1到char2之間的字元
5)[^<char>] 3) 4)條規則的取反
6)ESCAPE使用轉義符號當作萬用字元號(例:`%!_%`ESCAPE`!`)。也可以使用[]包起來(例:`[_]`匹配下劃線)

相關文章