字元串截斷函數是指:Stuff 和 SubString,字元串查找函數是:CharIndex 和 PatIndex 一,SubString 截取子串 最常用的字元串函數,用於截取特定長度的子串。 參數說明: start 參數:整數,表示開始位置;字元的序號(index)從1開始,即第一個字元的序號是 ...
字元串截斷函數是指:Stuff 和 SubString,字元串查找函數是:CharIndex 和 PatIndex
一,SubString 截取子串
最常用的字元串函數,用於截取特定長度的子串。
SUBSTRING ( expression ,start , length )
參數說明:
- start 參數:整數,表示開始位置;字元的序號(index)從1開始,即第一個字元的序號是1;
- length參數:整數,表示截取字元的最大數量;如果start+Length 大於字元串的總長度,那麼返回從Start開始的所有字元;
- 返回data type:如果expression是char或varchar,那麼返回varchar;如果expression是nchar或nvarchar,那麼返回nvarchar;
例如:字元串 abcdef,截取從第二個字元開始,共2個字元的子串是:bc
select substring('abcdef',2,2)
二,Stuff 刪除字元串的指定部分,並插入相應的字元,即將字元串中指定部分替換為新的字元串
Stuff函數從字元串指定的開始位置,刪除指定長度的字元串,並從該位置插入新的字元串。
It deletes a specified length of characters in the first string at the start position and then inserts the second string into the first string at the start position.
STUFF ( character_expression , start , length , replaceWith_expression )
參數說明:
- start:整數,表示刪除和插入的開始位置;如果start是0,或大於字元串的總長度,那麼該函數返回NULL;
- length:整數,表示刪除字元的最大數量;如果Length+Start大於字元串的總長度,表示刪除從Start開始的所有字元;
- replaceWith_expression :字元類型,表示從開始位置(start)插入的字元串;
例如:從不同位置截斷字元串abcdef,查看返回結果
declare @str varchar(6) set @str='abcdef' select stuff(@str,7,1,''), stuff(@str,0,1,''), stuff(@str,3,7,''), stuff(@str,3,7,'12345')
使用stuff函數,必須註意兩點:
- 如果Length+Start大於字元串的總長度,刪除從Start開始的所有字元;
- 如果Start是0,或大於字元串的總長度,返回Null;
三,CharIndex 從字元串中查找字元
從字元串search中查找另一個字元串find,如果find存在於search中,返回find在search中第一次匹配的開始位置;如果find不存在於search中,返回0;
CHARINDEX ( find ,search [ , start ] )
參數說明:
- 在字元串search中查找字元串find,查找的開始位置由參數start確定;
- 如果start參數沒有指定,預設從字元串search的第一個字元開始查找;
- 如果find 或 search 是null,返回null;
- 返回值是整數:如果從search中查找到find,那麼返回第一次匹配的開始位置;如果查找不到,返回0;
例如:從字元串abcbcdef的不同位置,查找不同的字元
select charindex('bc','abcbcdef'), charindex('bc','abcbcdef',3), charindex('bce','abcbcdef')
結果分析:
- bc 在 abcbcdef 中出現多次,從第1個字元開始查找,該函數只返回第一次匹配的開始位置;
- bc 在 abcbcdef 中出現多次,從第3個字元開始查找,該函數只返回第一次匹配的開始位置;
- bce 不存在 abcbcdef 中,該函數返回0;
四,PatIndex 從字元串中按照Pattern查找特定字元
PatIndex 從字元串中查找pattern,返回第一次匹配成功的開始位置;如果匹配失敗,返回0;
Returns the starting position of the first occurrence of a pattern in a specified expression, or zeros if the pattern is not found.
PATINDEX ( '%pattern%' , expression )
pattern:樣式字元,能夠使用通配符(%,_,[],^),必須以通配符%開始和結尾;
示例:從字元串abcbcdef的匹配不同的pattern
select patindex('%bc%','abcbcdef'), patindex('%b_b%','abcbcdef'), patindex('%b[^c]b%','abcbcdef'), patindex('%bce%','abcbcdef')
結果分析:
- Pattern: %bc% 表示bc字元前面和後面有0或多個字元
- Pattern: %b_b% 表示b和b之間有一個字元,其前面和後面有0或多個字元
- Pattern: %b[^c]b% 表示b和b之間有一個字元,該字元不能是c,其前面和後面有0或多個字元
參考文檔:
PATINDEX (Transact-SQL)
CHARINDEX (Transact-SQL)
SUBSTRING (Transact-SQL)
STUFF (Transact-SQL)