1. 前言
MSSQL数字拼接是数据库编程中经常会用到的一个功能,比如把两个字段合并成一个字段,或者把一个字段中的多个值合并成一个字符串。本文将介绍MSSQL数字拼接的简单套路,帮助大家更好地善用这个功能。
2. 用“+”号拼接字符串
2.1 基本用法
在MSSQL中,可以使用“+”号将两个字符串拼接在一起。
DECLARE @str1 varchar(10) = 'Hello'
DECLARE @str2 varchar(10) = 'World'
SELECT @str1 + ' ' + @str2 AS result
以上代码的执行结果为:
result
---------
Hello World
2.2 拼接数字和字符串
在使用“+”号拼接数字和字符串时,需要注意数字必须先转换成字符串,否则会报错。
DECLARE @num int = 123
DECLARE @str varchar(10) = 'Hello'
SELECT @str + CAST(@num AS varchar(10)) AS result
以上代码的执行结果为:
result
---------
Hello123
3. 用FOR XML PATH方式拼接字符串
3.1 应用场景
使用“+”号拼接字符串的方式在某些情况下并不适用,比如需要将一个表中的多行数据合并成一行字符串。这种情况下,可以使用FOR XML PATH方式来实现。
3.2 基本用法
下面的例子演示了如何通过FOR XML PATH方式将一列数据合并成一行字符串:
CREATE TABLE dbo.users (
id int,
name varchar(50)
)
INSERT INTO dbo.users (id, name)
VALUES (1, 'John'), (2, 'Mike'), (3, 'Lucy')
SELECT STUFF((SELECT ', ' + name FROM dbo.users FOR XML PATH('')), 1, 2, '') AS result
以上代码的执行结果为:
result
------------
John, Mike, Lucy
这里的STUFF函数用于删除第一个逗号和空格符号,否则结果字符串的开头会多一个逗号和空格符号。
3.3 分组后拼接
在对多列数据进行拼接时,我们可能需要根据某些条件进行分组,然后再将每组数据合并成一行字符串。下面的例子演示了如何通过FOR XML PATH方式实现列数据的分组拼接:
CREATE TABLE dbo.orders (
order_id int,
product varchar(50),
quantity int
)
INSERT INTO dbo.orders (order_id, product, quantity)
VALUES (1, 'Apple', 2), (1, 'Banana', 3), (2, 'Orange', 5), (3, 'Peach', 1)
SELECT order_id, STUFF((SELECT ', ' + CAST(quantity AS varchar(10)) + ' ' + product
FROM dbo.orders AS o2
WHERE o2.order_id = o1.order_id
FOR XML PATH('')), 1, 2, '') AS result
FROM dbo.orders AS o1
GROUP BY order_id
以上代码的执行结果为:
order_id result
-----------------------
1 2 Apple, 3 Banana
2 5 Orange
3 1 Peach
这里的GROUP BY语句用于将数据按照order_id进行分组,然后再在每组数据中,将quantity和product合并成一行字符串。
4. 用STRING_AGG函数拼接字符串
4.1 应用场景
在SQL Server 2017及以上版本中,新增了一个STRING_AGG函数,可以更方便地将多行数据合并为一行字符串。
4.2 基本用法
下面的例子演示了如何使用STRING_AGG函数将一列数据合并成一行字符串:
CREATE TABLE dbo.users (
id int,
name varchar(50)
)
INSERT INTO dbo.users (id, name)
VALUES (1, 'John'), (2, 'Mike'), (3, 'Lucy')
SELECT STRING_AGG(name, ', ') AS result
FROM dbo.users
以上代码的执行结果为:
result
------------
John, Mike, Lucy
4.3 拼接数字和字符串
STRING_AGG函数可以自动将数字类型转换成字符串类型,因此无需使用CAST函数:
CREATE TABLE dbo.users (
id int,
name varchar(50),
age int
)
INSERT INTO dbo.users (id, name, age)
VALUES (1, 'John', 18), (2, 'Mike', 25), (3, 'Lucy', 30)
SELECT STRING_AGG(name + ' (' + age + ')', ', ') AS result
FROM dbo.users
以上代码的执行结果为:
result
----------------
John (18), Mike (25), Lucy (30)
5. 结论
MSSQL数字拼接是在数据库编程中经常会用到的一个功能。我们可以使用“+”号拼接字符串,也可以使用FOR XML PATH或STRING_AGG函数将多行数据合并为一行字符串。在实际开发中,我们应根据具体的场景选择不同的方法来实现数字拼接功能。