1. 字符串拼接
1.1 使用 “+” 号拼接
在 SQL Server 中,使用 “+” 号可以拼接两个字符串。例如:
DECLARE @str1 VARCHAR(50) = 'Hello '
DECLARE @str2 VARCHAR(50) = 'world!'
SELECT @str1 + @str2 AS Result
执行结果为:
Result
------------------
Hello world!
需要注意的是,如果拼接的其中一个字符串为 NULL,则拼接结果也为 NULL。
1.2 使用 CONCAT 函数拼接
除了使用加号拼接字符串外,SQL Server 还提供了 CONCAT 函数来进行字符串拼接操作。例如:
DECLARE @str1 VARCHAR(50) = 'Hello '
DECLARE @str2 VARCHAR(50) = 'world!'
SELECT CONCAT(@str1, @str2) AS Result
执行结果同上。
CONCAT 函数可以拼接多个字符串,例如:
DECLARE @str1 VARCHAR(50) = 'Hello'
DECLARE @str2 VARCHAR(50) = ' '
DECLARE @str3 VARCHAR(50) = 'world'
DECLARE @str4 VARCHAR(50) = '!'
SELECT CONCAT(@str1, @str2, @str3, @str4) AS Result
执行结果为:
Result
------------------
Hello world!
需要注意的是,如果拼接的其中一个字符串为 NULL,则拼接结果也为 NULL。
2. 字符串截取
2.1 使用 SUBSTRING 函数截取
SUBSTRING 函数用于截取字符串中的一段子串。其语法为:
SUBSTRING (expression, start, length)
其中:
expression:要截取的字符串。
start:截取的起始位置,从 1 开始计数。
length:要截取的长度。
例如:
DECLARE @str VARCHAR(50) = 'Hello world!'
SELECT SUBSTRING(@str, 1, 5) AS Result
执行结果为:
Result
-----
Hello
需要注意的是,如果 start 大于字符串长度,结果为 NULL。如果 length 大于剩余的字符数,截取到字符串末尾。
2.2 使用 LEFT 和 RIGHT 函数截取
LEFT 函数用于从字符串左侧开始截取一定长度的子串。其语法为:
LEFT (expression, length)
其中:
expression:要截取的字符串。
length:要截取的长度。
例如:
DECLARE @str VARCHAR(50) = 'Hello world!'
SELECT LEFT(@str, 5) AS Result
执行结果同上。
RIGHT 函数用于从字符串右侧开始截取一定长度的子串。其语法为:
RIGHT (expression, length)
其中:
expression:要截取的字符串。
length:要截取的长度。
例如:
DECLARE @str VARCHAR(50) = 'Hello world!'
SELECT RIGHT(@str, 6) AS Result
执行结果为:
Result
-----
world!
3. 字符串替换
使用 REPLACE 函数可以将字符串中的某个子串替换为另一个子串。其语法为:
REPLACE (expression, pattern, replacement)
其中:
expression:要替换的字符串。
pattern:要查找并替换的子串。
replacement:替换成的子串。
例如:
DECLARE @str VARCHAR(50) = 'Hello world, hello SQL Server!'
SELECT REPLACE(@str, 'hello', 'hi') AS Result
执行结果为:
Result
--------------------------------
Hello world, hi SQL Server!
需要注意的是,REPLACE 函数区分大小写。如果要不区分大小写进行替换,可以使用 LOWER 或 UPPER 函数将字符串统一转换为小写或大写,再进行替换操作。
4. 字符串转换
4.1 使用 CAST 和 CONVERT 函数转换
在 SQL Server 中,可以使用 CAST 和 CONVERT 函数将某种类型的数据转换为另一种类型。例如,将字符串转换为整数:
DECLARE @str VARCHAR(50) = '123'
SELECT CAST(@str AS INT) AS Result1
SELECT CONVERT(INT, @str) AS Result2
执行结果为:
Result1
-------
123
Result2
-------
123
需要注意的是,在进行类型转换时需要考虑数据的精度和溢出问题,否则可能会得到错误的结果。
4.2 使用 PARSE 函数转换
从 SQL Server 2012 开始,可以使用 PARSE 函数将字符串转换为指定格式的日期或时间。其语法为:
PARSE (string_value AS data_type [ USING culture ])
其中:
string_value:要转换的字符串。
data_type:要转换的目标数据类型。
culture:可选参数,表示要使用的区域性。默认值为当前会话的区域性。
例如:
DECLARE @str VARCHAR(50) = '2019-09-25'
SELECT PARSE(@str AS DATE) AS Result
执行结果为:
Result
------------
2019-09-25
需要注意的是,PARSE 函数支持许多不同的数据类型和格式,具体可参考官方文档。
5. 字符串分割
在 SQL Server 中,通常情况下无法直接对一个字符串进行分割操作。但是,可以使用一些方法来实现字符串分割的效果。
5.1 使用 SUBSTRING 和 CHARINDEX 函数分割
可以使用 SUBSTRING 和 CHARINDEX 函数来截取字符串中指定位置之间的子串。例如:
DECLARE @str VARCHAR(50) = 'A,B,C,D,E'
SELECT SUBSTRING(@str, 1, CHARINDEX(',', @str) - 1) AS Part1,
SUBSTRING(@str, CHARINDEX(',', @str) + 1, CHARINDEX(',', @str, CHARINDEX(',', @str) + 1) - CHARINDEX(',', @str) - 1) AS Part2,
SUBSTRING(@str, CHARINDEX(',', @str, CHARINDEX(',', @str) + 1) + 1, LEN(@str) - CHARINDEX(',', @str, CHARINDEX(',', @str) + 1)) AS Part3
执行结果为:
Part1 Part2 Part3
----- ----- -----
A B C,D,E
需要注意的是,这种方法只适合于已知字符串中分隔符的数量和位置的情况。
5.2 使用 XML 转换分割
可以将字符串转换成 XML 格式,使用 XML 中的节点和属性来实现字符串分割。例如:
DECLARE @str VARCHAR(50) = 'A,B,C,D,E'
DECLARE @xml XML = '' + REPLACE(@str, ',', ' ') + ' '
SELECT t.value('.', 'varchar(50)') AS Part
FROM @xml.nodes('/str') AS x(t)
执行结果为:
Part
-----
A
B
C
D
E
需要注意的是,这种方法对字符串的长度有限制。
5.3 使用 STRING_SPLIT 函数分割
从 SQL Server 2016 开始,可以使用 STRING_SPLIT 函数来将字符串分割成多个元素。其语法为:
STRING_SPLIT (string, separator)
其中:
string:要分割的字符串。
separator:分隔符。
例如:
DECLARE @str VARCHAR(50) = 'A,B,C,D,E'
SELECT value AS Part
FROM STRING_SPLIT(@str, ',')
执行结果为:
Part
-----
A
B
C
D
E
需要注意的是,STRING_SPLIT 函数只适用于 SQL Server 2016 及以上版本。
以上就是本文介绍的 SQL Server 字符串处理技巧,包括字符串拼接、字符串截取、字符串替换、字符串转换和字符串分割。这些技巧都是日常开发中比较常用的操作,掌握好这些技巧可以提高我们的开发效率。