从左截取 LEFT
参数1:要截取的字符串,参数2:截取字符个数
LEFT ( character_expression , integer_expression )
从右截取 RIGHT
参数1:要截取的字符串,参数2:截取字符个数
RIGHT ( character_expression , integer_expression )
获取表达式长度 LEN DATALENGTH
两者有区别:
LEN ( string_expression )
返回指定字符串表达式的字符数,其中不包含尾随空格。
DATALENGTH ( expression )
此函数返回用于表示任何表达式的字节数。
字符串去除前后空格 LTRIM RTRIM
LTRIM ( character_expression )
去除字符串前面的空格
RTRIM ( character_expression )
去除字符串尾随空格
REPLICATE 复制函数
参数1:字符串或二进制数据类型的表达式
参数2:整数类型的表达式
select replicate('abc#', 3);
result:abc#abc#abc#
截取一定长度的字符串 SUBSTRING
参数1:要截取的字符串,参数2:开始截取的下标,参数3:截取的字符长度
SUBSTRING ( expression ,start , length )
替换函数 STUFF
参数1:字符数据
参数2:指定删除和插入的开始位置
参数3:指定要删除的字符数
参数4:插入替换的内容
STUFF (character_expression, start, length, replaceWith_expression)
demo:
SELECT STUFF('abcdef', 2, 3, 'ijklmn');
result:
aijklmnef
REPLACE替换函数
参数1:搜索的字符串
参数2:要查找的子字符串
参数3:替换字符串
REPLACE ( string_expression, string_pattern, string_replacement )
demo:
SELECT REPLACE('abcdefghicde','cde','xxx');
result:
abxxxfghixxx
区别:STUFF可以指定替换范围,而REPLACE则是全部范围内替换
获取特定字符串下标 CHARINDEX
参数1:要查找的序列, 限制为 8000 个字符
参数2:要搜索的字符串表达式
参数3:默认从0开始
注意:CHARINDEX函数搜索字符串时,不区分大小写
CHARINDEX (expressionToFind,expressionToSearch [ , start_location ])
PATINDEX 返回查找表达式的下标
PATINDEX ( '%pattern%' , expression )
SELECT PATINDEX('%ter%', 'interesting data');
result:3
区别:patindex支持通配符,charindex不支持。
逆序函数 REVERSE
REVERSE ( string_expression )
返回字符串值的逆序。
**注:**有的函数对数据类型有要求,需要进行类型转换
[Err] 42000 - [SQL Server]参数数据类型 text 对于 replace 函数的参数 1 无效。
-- CAST Syntax:
CAST ( expression AS data_type [ ( length ) ] )
-- CONVERT Syntax:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
demo:
convert(varchar(8000),content)
cast(content as varchar(8000))
Replace(Cast([Content] as nvarchar(4000)),'oldkeyword','newkeyword')
强制转换 CAST
SELECT 9.5 AS Original, CAST(9.5 AS int) AS int,
CAST(9.5 AS decimal(6,4)) AS decimal;
转换 CONVERT
SELECT 9.5 AS Original, CONVERT(int, 9.5) AS int,
CONVERT(decimal(6,4), 9.5) AS decimal;
result:
Original int decimal
9.5 9 9.5000
综合应用:
Declare @S1 varchar(100)
Select @S1='jdasgjaadfgas//dkfsdjausdwwWskdfvbbbaskdf'
--获取 www起始的字符串 (CHARINDEX,PATINDEX不区分大小写)
Select Substring(@S1,CHARINDEX('wWw',@S1),Len(@S1))
Select Substring(@S1,PATINDEX('%wWw%',@S1),Len(@S1))
---
result:wwWskdfvbbbaskdf
--获取 //之后的字符串
Select Substring(@S1,CHARINDEX('//',@S1)+2,Len(@S1))
Select Substring(@S1,PATINDEX('%//%',@S1)+2,Len(@S1))
---
result:dkfsdjausdwwWskdfvbbbaskdf
--获取 aa 和 bb 之前的字符串
select Substring(@S1,CHARINDEX('aa',@S1)+Len('aa'),(CHARINDEX('bb',@S1)-CHARINDEX('aa',@S1)-len('aa')))
result:dfgas//dkfsdjausdwwWskdfv
--获取 das 和 bb 之前的字符串
select Substring(@S1,CHARINDEX('das',@S1)+Len('das'),(CHARINDEX('bb',@S1)-CHARINDEX('das',@S1)-Len('das')))
result:gjaadfgas//dkfsdjausdwwWskdfv