sqlserver提供了一系列字符串處理函數:substring、left、right、len、charindex、patindex、replace、replicate、stuff、upper、lower、rtrim、ltrim等函數。
- substring函數用於從字符串中提取子串,從指定位置開始(start),具有特定長度(length)的子字符串。
substring(string,strat,length)
eg: select substring('abcde',1,3)返回子字符串'abc'
select substring('abcde',1,8)返回字符串'abcde'(如果length長度大於字符串長度,則返回原字符串)
- left和right函數返回輸入字符串從左或右開始的n個字符
left(sting,n) / right(string,n)
eg: select left('abcde',3)返回字符串'abc'
select right('abcde',3)返回字符串'cde'
- len和datalength函數分別返回字符串中的字符數以及字符串中的字節數
len(string) / datalength(string)
eg: select len('and')返回字符數3
select datalength(N'abc')返回字節數6
select len(' abc ')返回5,無論有多少個連續空格,均計算一次
注:普通字符,字符串的字符數和字節數是一致的,這是因為一個字符只占一個字節的存儲空間
Unicode字符,字符串的字符數和字節數是不一致的,一個字符占用兩個字節的空間,故字符數是字節數的一半
- charindex函數返回字符串中某個子串首次出現的起始位置
charindex(substring,string[,start_pos]),可以選擇性的指定搜索的起始位置,即對start_pos賦值,未對其賦值則從第一個字符開始搜索
eg: select charindex('m','abnmdemf',5)返回7
select charindex('m','abnmdemfcv',8)返回0
select charindex('m','abnmdemf',3)返回4
默認情況下,sqlserver對大小寫是不敏感的,但是當設置了對大小寫敏感COLLATE Latin1_General_CS_AS時(patindex函數同樣適用):
eg: select charindex'test', 'this Test is Test' COLLATE Latin1_General_CS_AS)返回0
select charindex'test', 'this Test is Test' COLLATE Latin1_General_CI_AS)返回6
- patindex函數返回某個模式第一次出現的起始位置
patindex(pattern,string)
eg: select patindex('%[0-9]%','abcd123efgh')返回5,查詢數字0-9中任一數字在字符串'abcd123efgh'首次出現的位置,%表示數字前可以匹配任意長度的字符,包括空字符
- replace函數將字符串中出現的所有某個子串替換為另一個字符串
replace(string,substring1,substring2)將substring1替換為substring2
eg: select replace( 'l-a 2-b', '-', ':')返回結果為'1:a 2:b'
- replicate函數指定的次數復制字符串
replicate(string,n)
eg: select replicate('abc',3)返回'abcabcabc'
- stuff函數先刪除字符串中的一個子串,再插入一個新的子串作為替換
stuff(string,pos,delete_length,insertstring)
eg: select stuff('xyz',2,1,'abc')返回'xabcz'
- upper和lower函數將字符串轉換為大寫或小寫
upper(string) / lower(string)
- rtrim和ltrim函數刪除字符串中的尾隨空格或前導空格
rtrim(string) / ltrim(string)
eg: select rtrim(ltrim(' abc '))