0. 加號(+)
SELECT 'abc'+'123'
結果:abc123
注意若是varchar 型別+int 型別,需要將int型別轉換為varchar型別,方能作為字串相加
SELECT 'abc' + CAST(18 AS VARCHAR(10))
結果:abc18
1. LEFT和RIGHT
-
【定義】
LEFT()返回從左往右指定長度的子字串。
RIGHT()返回從右往左指定長度的子字串。 -
【語法】
LEFT(expressionString,lengthInt)
RIGHT(expressionString,lengthInt)
- 注意第二個引數是期望保留的長度
-
【示例】
SELECT LEFT('abc',2)
返回ab
SELECT RIGHT('abc',2)
返回bc
2. SUBSTRING
-
【定義】 SUBSTRING()函式用於從字串中提取子串
-
【語法】
SUBSTRING(expressionString,startInt,lengthInt)
對字串string,從start索引位置開始,返回length長度的子字串
注意這裡的索引是從1開始數的
-
【示例】
SELECT SUBSTRING('abcdef',2,3)
結果:bcd
-
【注意】 若是期望從某個起始位置開始獲取直到結尾的所有字元,可以使用一個比目標字串長度還大的值作為擷取子串的長度引數,SUBSTRING將返回最大起始位置到目標字串的結尾,而不會將多出的長度以空格填充。
SELECT SUBSTRING('abc',1,9)
結果是:"abc"
,而不是"abc "
3. LEN和DATALENGTH
-
【定義】
LEN函式返回指定字串的字元數
DATALENTH返回的是指定字串的位元組數 -
【語法】
LEN(expressionString)
DATALENGTH(expressionString)
-
【示例】
SELECT LEN('abc')
結果:3
SELECT LEN('張三')
結果:2SELECT DATALENGTH('abc')
結果:3
SELECT DATALENGTH(N'abc')
結果:6
SELECT DATALENGTH('張三')
結果:4 -
【注意】
LEN函式是計算的是不包含尾隨的空格,而DATALENGTH是會包含尾隨的空格SELECT LEN('ab ')
結果:2
SELECT DATALENGTH('ab ')
結果:3
4. CHARINDEX和PATINDEX
-
【定義】
CHARINDEX用於尋找某一個字元在目標字串第一次出現的起始位置(從1開始數)PATINDEX用於尋找某個模式的子字串在目標字串中第一次出現的起始位置
-
【語法】
- CHARINDEX(str2Find,str2Search)
- 注意第一個引數是待尋找的子串
- PATINDEX('%pattern%',str2Search)
- CHARINDEX(str2Find,str2Search)
-
【示例】
SELECT CHARINDEX('ab','abcab')
結果:1- 這裡'ab'在‘abcab'中出現兩次,但是CHARINDEX函式返回的是第一次出現的位置
SELECT PATINDEX('%[0-9]%','abc123abc')
結果:4
SELECT PATINDEX('a%','abc123')
結果:1
SELECT PATINDEX('a_c%','abc123')
結果:1- 這裡的第一個引數是和LIKE謂詞後的模式規則相同
5. REPLACE
-
【定義】REPLACE函式可以將目標字串中所有出現的某個子字串替換為指定的字串
-
【語法】
REPLACE(expressionString,patternString,replacementString) -
【示例】
- 將字串中的'ab'替換為'AB'
SELECT REPLACE('ab222ab333ab444','ab','AB')
結果:AB222AB333AB444
- 將字串中的'ab'全部刪除(即全部替換為空格)
SELECT REPLACE('ab222ab333ab444','ab','')
結果:222333444
- 將字串中的'ab'替換為'AB'
6. REPLICATE和SAPCE
-
【定義】
REPLICATE用於將指定的字串複製指定的次數SPACE用於返回指定長度的空格
-
【語法】
REPLICATE(expressString,nInt)
SPACE(nInt)
-
【示例】
SELECT REPLICATE('abc',3)
結果:abcabcabcSELECT DATALENGTH(SPACE(10))
結果:10
7. STUFF
-
【定義】
將字串中的一部分替換為另外一個子字串。用於替換的子字串不需要和被替換的部分長度一樣。
-
【語法】
STUFF(expressionString,startInt,lengthInt,expressionString2)
-
【示例】
-
將目標字串中從第4個字元之後的三個字元替換為指定的字串
SELECT STUFF('abc123def',4,3,'66666666')
結果:abc66666666def -
將目標字串中的第一個字元替換為空格(相當於刪除目標字串的第一個字元)
SELECT STUFF(',a,b,c',1,1,'')
結果:a,b,c
-
8. REVERSE
-
【定義】用於將指定的字串中的字元顛倒過來
-
【語法】
REVERSE(expressionString)
-
【示例】
SELECT REVERSE('abc')
結果:cba
9. UPPER和LOWER
-
【定義】將指定的字串全部轉換為大寫或小寫
-
【語法】
UPPER(expressionString)
LOWER(expressionString)
-
【示例】
SELECT UPPER('aBc')
結果:ABC
SELECT LOWER('aBc')
結果:abc
10. LTRIM和RTRIM
-
【定義】用於將指定的字串的前導空格和尾隨空格刪除
-
【語法】
LTRIM(expressionString)
RTRIM(expressionString)
-
【示例】
- 刪除字串前端的空格
SELECT LTRIM(' abc')
結果:abc - 刪除字串後端的空格
SELECT RTRIM('abc ')
結果:abc - 同時刪除字串前後的空格
SELECT LTRIM(RTRIM(' abc '))
結果:abc
- 刪除字串前端的空格
11. QUOTENAME
-
【定義】預設用於給指定的字串外加一個方括號
這個函式的第二個引數是可選的,第二個引數只能是英文逗號(,)、英文引號(")或預設的方括號(]) -
【語法】
QUOTENAME(expressionString,[character])
-
【示例】
SELECT QUOTENAME('Name')
結果:[Name]SELECT QUOTENAME('Name',')')
結果:(Name)SELECT QUOTENAME('Name','"')
結果:"Name"
12. 綜合使用示例
刪除字串最後一位
DECLARE @a VARCHAR(100)='a,b,c,'
--SELECT LEN(@a)--結果:6
--法1
SELECT LEFT(@a,LEN(@a)-1)
--結果:a,b,c
--法2
SELECT STUFF(@a,LEN(@a),1,'')
--結果:a,b,c
計算某個字串出現的次數
- 實現思路:將需要計算特定子串出現的次數,全部替換為空格,之後使原始長度減去替換後的長度,即為特定子串出現的次數
DECLARE @str VARCHAR(100)='abcabc'
DECLARE @oldLength INT =LEN(@str)--@oldLength=6
DECLARE @newStr VARCHAR(100)=REPLACE(@str,'a','')--@newStr=bcbc
DECLARE @newLength INT=LEN(@newStr)--@newLength=4
SELECT @oldLength-@newLength--結果:2
字串統一長度,不足則前面補零
- 實現思路:甭管當前的長度,一律在該字串前面加上9個0,之後在從右往左擷取指定長度的子串作為結果值
DECLARE @tableVar TABLE
(
No VARCHAR(100) NOT NULL
);
INSERT INTO @tableVar
(
No
)
VALUES
('1'),
('12'),
('123'),
('1234'),
('1234');
--字串統一長度為10,不足則前位補0
SELECT RIGHT(REPLICATE('0', 9) + No, 10)FROM @tableVar;--法1
SELECT REPLICATE('0', 10 - LEN(No)) + No AS NO FROM @tableVar;--法2
--結果
--0000000001
--0000000012
--0000000123
--0000001234
--0000001234
--字串統一長度,不足則使用空格在後面補足
SELECT No + SPACE(10 - LEN(No)) FROM @tableVar;--法1
SELECT LEFT(NO+SPACE(10),10) FROM @tableVar;--法2
--驗證上述操作:
SELECT DATALENGTH(No + SPACE(10 - LEN(No))) FROM @tableVar--驗證法1
SELECT DATALENGTH( LEFT(NO+SPACE(10),10)) FROM @tableVar --驗證法2
--結果:
--10
--10
--10
--10
--10