首页 > 代码库 > TSQL 字符串函数:截断和查找
TSQL 字符串函数:截断和查找
字符串截断函数是指: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)
TSQL 字符串函数:截断和查找