1. LEFT和RIGHT函数
LEFT和RIGHT函数都是用来截取字符串的函数,LEFT返回字符串左边指定长度的字符,RIGHT返回字符串右边指定长度的字符。
LEFT函数的语法如下:
LEFT (str, length)
其中str为要截取的字符串,length为截取的长度。示例代码如下:
SELECT LEFT('ABCDEFG', 3) AS Result
执行以上代码,结果为:
Result
-------
ABC
RIGHT函数的语法如下:
RIGHT (str, length)
其中str为要截取的字符串,length为截取的长度。示例代码如下:
SELECT RIGHT('ABCDEFG', 3) AS Result
执行以上代码,结果为:
Result
-------
EFG
2. SUBSTRING函数
SUBSTRING函数可以根据指定位置和长度截取字符串,语法如下:
SUBSTRING(str, start, length)
其中str为要截取的字符串,start为要截取的起始位置(从1开始),length为要截取的长度。示例代码如下:
SELECT SUBSTRING('ABCDEFG', 2, 3) AS Result
执行以上代码,结果为:
Result
-------
BCD
2.1 使用SUBSTRING截取身份证号中的生日
SUBSTRING函数常用于截取复杂字符串中的某些信息,下面以身份证号为例,演示如何使用SUBSTRING函数截取生日。
DECLARE @IDCard VARCHAR(18) = '450902199001231234'
SELECT SUBSTRING(@IDCard, 7, 8) AS Birthday
执行以上代码,结果为:
Birthday
----------
19900123
可以看到,通过截取身份证号中从第7个字符开始,并且长度为8的字符,我们就成功的获取到了出生日期。
3. CHARINDEX函数
CHARINDEX函数用于返回指定字符串在目标字符串中第一次出现的位置,语法如下:
CHARINDEX (expression1, expression2 [, start_location ] )
其中expression1是要查找的字符串,expression2是目标字符串,start_location为开始查找的位置。示例代码如下:
SELECT CHARINDEX('A', 'ABCDEFG') AS Result
执行以上代码,结果为:
Result
-------
1
3.1 使用CHARINDEX截取URL中的域名
下面以URL为例,演示如何使用CHARINDEX函数截取域名。
DECLARE @URL VARCHAR(MAX) = 'https://www.baidu.com/search?wd=SQL%20Server'
SELECT SUBSTRING(@URL, CHARINDEX('//', @URL) + 2, CHARINDEX('/', @URL, CHARINDEX('//', @URL)) - CHARINDEX('//', @URL) - 2) AS Domain
执行以上代码,结果为:
Domain
--------
www.baidu.com
可以看到,通过CHARINDEX函数,我们先找到URL中的第一个'//'出现的位置,再找到第二个'/'出现的位置,然后从第一个'//'位置加2开始,截取到第二个'/'位置之前的字符串,就成功的获取到了域名。
4. REPLACE函数
REPLACE函数用于将字符串中的指定部分替换成新的字符串,语法如下:
REPLACE (string_expression ,string_pattern, string_replacement )
其中string_expression为要处理的字符串,string_pattern为要替换的字符串,string_replacement为用来替换的字符串。示例代码如下:
SELECT REPLACE('ABCDEFG', 'CD', '**') AS Result
执行以上代码,结果为:
Result
------
AB**EFG
4.1 使用REPLACE函数替换敏感词
下面以替换敏感词为例,演示如何使用REPLACE函数。
CREATE TABLE SensitiveWords
(
ID INT PRIMARY KEY,
Word NVARCHAR(50) NOT NULL
)
INSERT INTO SensitiveWords (ID, Word) VALUES (1, '敏感词1')
INSERT INTO SensitiveWords (ID, Word) VALUES (2, '敏感词2')
INSERT INTO SensitiveWords (ID, Word) VALUES (3, '敏感词3')
DECLARE @Content NVARCHAR(MAX) = '这里有敏感词1和敏感词2,还有敏感词3'
SELECT @Content AS OriginalContent
SELECT
REPLACE(
REPLACE(
REPLACE(@Content, S.Word, REPLICATE('*', LEN(S.Word)))
, S.Word + ' ', REPLICATE('*', LEN(S.Word) + 1))
, ' ' + S.Word, REPLICATE('*', LEN(S.Word) + 1)) AS FilteredContent
FROM SensitiveWords S
执行以上代码,结果为:
OriginalContent
-----------------------
这里有敏感词1和敏感词2,还有敏感词3
FilteredContent
------------------------------------------
这里有*********和*********,还有*********
可以看到,我们先在数据库中建立了一个敏感词表,然后在Content中查找敏感词,并使用REPLACE函数将其替换成相应数量的*。
总结
以上就是SQL Server中常用的截取字符串函数,LEFT、RIGHT、SUBSTRING、CHARINDEX和REPLACE函数。通过这些函数,我们可以轻松的处理字符串中的各种信息,极大地方便了我们的数据处理。