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
Sql Server将一列字段拼接成字符串方法的更多相关文章
- Sql Server判断某列字段是否为空或判断某列字段长度
1.用is null 和 is not null来判断字段是否为空. 2.用len()函数来判断字段长度.
- 在sql脚本中将查询结果集拼接成字符串
- sql语句将查询的结果拼接成字符串
表样: sqlserver: --方法1 DECLARE @STR VARCHAR(8000) SELECT @STR=ISNULL(@STR+',','')+userID FROM (SELECT ...
- SQL查询结果拼接成字符串
sqlserver中将查询结果拼接成字符串 #for xml path(param)--将查询结果以xml格式输出 1 select id,name from table1 for xml pat ...
- SQL Server表描述 及 字段描述的增、删、改、查询
SQL Server表描述 及 字段描述的增.删.改.查询 --测试: --创建表及描述信息 ),isname )) --为表添加描述信息 EXECUTE sp_addextendedproperty ...
- sql server like 在将值转换成数据类型int失败
select * from table where title like '%'?'%'; 采用? 传参会报错:sql server like 在将值转换成数据类型int失败 select * fro ...
- SQL Server 按某一字段分组 取 最大 (小)值所在行的数据
SQL Server 按某一字段分组 取 最大 (小)值所在行的数据 -- 按某一字段分组 取 最大 (小)值所在行的数据 -- (爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 2007-10-23 ...
- SQL Server数据库自增字段正确的插入值的描述
我们今天主要向大家讲述的是SQL Server数据库之向SQL Server自增字段正确的插入值的实际操作步骤,在一般的情况下,我们不能向 SQL Server 数据库自增字段中插入值,如果非要这么干 ...
- SQL SERVER FOR 多列字符串连接 XML PATH 及 STUFF
原文:SQL SERVER FOR 多列字符串连接 XML PATH 及 STUFF 本来用 Writer 写一篇关于一列多行合并的博客来的,结果快写完了时候,在一个插入代码时候,崩了,重新打开,居然 ...
随机推荐
- Long Jumps(二分查找lower_bound()函数的运用)
Valery is a PE teacher at a school in Berland. Soon the students are going to take a test in long ju ...
- LeetCode 333. Largest BST Subtree
原题链接在这里:https://leetcode.com/problems/largest-bst-subtree/ 题目: Given a binary tree, find the largest ...
- java流类共享篇
总结: package com.aini; import java.io.*; import java.util.StringBuffere; public class tyt { public st ...
- Thread之一:线程生命周期及五种状态
<Thread之一:线程生命周期及五种状态> <juc线程池原理(四): 线程池状态介绍> 一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较 ...
- [置顶]
制作开机LOGO就是这么简单!
转自: http://mp.weixin.qq.com/s?__biz=MzAxNTAyOTczMw==&mid=2649328522&idx=1&sn=64107695fef ...
- 命名管道-MSDN例子
服务器: #include "stdafx.h" #include <windows.h> #include <stdio.h> #include < ...
- 装饰器api
import hashlib import time from django.http import HttpResponse key="qwrwertyuiop" visited ...
- 部署和调优 2.0 squid服务介绍
Squid 是比较知名的代理软件, 它不仅可以跑在 Linux 上还可以跑在 Windows 以及 Unix上,它的技术已经非常成熟.目前使用 Squid 的用户也是十分广泛的.Squid 与 Lin ...
- DAY11-MYSQL数据操作
一 介绍 MySQL数据操作: DML ======================================================== 在MySQL管理软件中,可以通过SQL语句中的 ...
- 解决html中的乱码问题
1.最简单粗暴的方法就是加一个meta标签,不过值得我们注意的是我们的meta标签是与我们的head标签是同一级的,所以千万不能将meta标签加到我们的head标签中. <meta http-e ...