Sql Server将一列字段拼接成字符串方法

  最近在项目中遇到个问题,需要将表中某列字段合并成字符串输出,如果直接通过代码全部读取出来,再遍历进行拼接显然不是最好的方法,所以想着能否在数据读取的时候直接拼接好返回,网上搜了可通过for xml来实现。

  首先,准备好需要的数据,脚本如下:  

if exists (select * from sysObjects where id=object_id('Student'))
    drop table Student
go

create table Student
(
    Id int,
    Name varchar(20)
)

go 
insert into Student values(1,'张三');
insert into Student values(2,'李四');
insert into Student values(3,'王五');

 当前表中数据如下:

  

 

 需要将Name以“张三;李四;王五”格式显示。

 具体通过实现如下:  

select stuff((
select ';'+name
from Student for xml path('')),1,1,'') as name

 乍一看,是不是有点迷糊,不急,下面我们一一道来。

 上面语句我们分为两部分来看,首先要明白for xml path的用法,在SQL SERVER中我们有很多方法读取XML字段中的片段,反过来SQL SERVER也允许我们将表数据以XML方式显示,for xml path便是以xml显示的一种方式。  

  select ';'+name
  from Student for xml path('')

 这段代码就是告诉数据库服务器要将生成的XML中name值以“;”方式进行拼接。

   更多可参考:http://www.cnblogs.com/doubleliang/archive/2011/07/06/2098775.html

 

    其次,我们理解stuff函数的用法,通过上述代码拼接生成的内容为“;张三;李四;王五”,显然最前的“;”是多余的,所以我们通过stuff来去除。

 STUFF(string,insert position,delete count,string inserted)函数是将一个字符串插入到另一个字符串中。插入时,插入的字符串可能删除指定数量的字符。

 第一个参数string,指的就是你要操作的内容,可以是一个固定字符串,也可以指定为某列;

 第二个参数insert position,指插入开始位置,SQLSERVER中默认是从1开始,而非从0开始

 第三个参数delete count,指的是要删除的字符个数,从position删除指定的个数,如果count为0表示不删除;

 第四个参数string inserted,表示要插入的字符串;

    eg:select  stuff('abcdefg',3,2,'123')

 结果:ab123efg

 

转载于:https://www.cnblogs.com/qianxingdewoniu/p/7118901.html

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在SQL Server中,可以使用内置的字符串拼接函数concat()来实现将某个字段值与其他字符串拼接的功能。该函数可以接受多个参数作为输入,每个参数都将被视为字符串。以下是一个使用concat()函数将某个字段值和其他字符串拼接的示例: 假设表名为“student”,字段名为“name”,需要将字段值和其他字符串拼接为新的列名为“new_name”的列,可以使用如下SQL语句: SELECT CONCAT(name, ' is a student') AS new_name FROM student; 该语句会将每个“name”字段值与字符串“ is a student”拼接起来,然后将结果作为新的“new_name”列返回。 需要注意的是,如果要在拼接过程中添加分隔符,可以在concat()函数中添加逗号分隔的字符串作为额外的参数。例如,以下SQL语句将每个“name”字段值与“age”字段值以冒号“:”为分隔符拼接起来: SELECT CONCAT(name, ':', age) AS info FROM student; 在这个示例中,“name”字段值和“:”字符串以及“age”字段值将以冒号为分隔符拼接起来,并返回一个新的“info”列。 ### 回答2: 在 SQL Server 中,可以使用 FOR XML PATH() 方法拼接字符串。假设我们有一个名为 "table1" 的表,其中有一个字段叫做 "column1",我们可以使用以下语句将所有 "column1" 字段的值以逗号连接起来: ```sql SELECT STUFF(( SELECT ',' + column1 FROM table1 FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 1, '') ``` 以上语句中: - `SELECT ',' + column1` 表示将每个 "column1" 字段的值前加上逗号。 - `FOR XML PATH('')` 表示将结果转换为 XML 并使用空字符串作为根元素名称。 - `TYPE` 表示将 XML 结果存储为 xml 类型。 - `.value('.', 'nvarchar(max)')` 表示将 xml 类型转换为 nvarchar 类型。 - `STUFF(..., 1, 1, '')` 表示将字符串中第一个逗号替换为空字符串。 以上语句的执行结果为一个以逗号为分隔符的字符串,其中包含所有 "column1" 字段的值。如果需要增加条件来筛选出满足条件的记录,则可以在 FROM 子句中添加相应的 WHERE 条件。 ### 回答3: 在 SQL Server 中,可以使用 CONCAT 函数来拼接字符串。该函数的语法如下: CONCAT (string1, string2, string3,...) 其中 string1, string2, string3 等是要拼接字符串。 例如,将字段 a、b、c 的值拼接一个字符串可以使用以下 SQL 语句: SELECT CONCAT(a, b, c) AS concatenated_string FROM my_table 其中 my_table 是表名,a、b、c 是字段名。执行该语句会返回一个名为 concatenated_string 的新列,其中包含 a、b、c 字段拼接字符串。 如果要在字符串中添加分隔符,可以在 CONCAT 函数中使用字符串常量来分隔: SELECT CONCAT(a, ' - ', b, ' - ', c) AS concatenated_string FROM my_table 在上面的语句中,字符串常量 ' - ' 就是分隔符,用于将 a、b、c 字段的值连接起来。 如果要在拼接字符串时排除空值,则可以使用 NULLIF 函数将空值替换为 NULL。例如: SELECT CONCAT(a, ' - ', NULLIF(b, ''), ' - ', NULLIF(c, '')) AS concatenated_string FROM my_table 在上面的语句中,如果 b 或 c 字段的值为空,则使用 NULLIF 将其替换为 NULL,这样在 CONCAT 函数中就不会将它们拼接字符串中。 总之,使用 CONCAT 函数可以方便地将多个字符串拼接一个字符串,并可以插入分隔符或排除空值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值