MSSQL数字拼接的简单套路

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函数将多行数据合并为一行字符串。在实际开发中,我们应根据具体的场景选择不同的方法来实现数字拼接功能。

数据库标签