SQL Server 字符串合并
应用场景:多条数据某列数据以某种样式合并成一条数据,例如:
1 1,0 小赵 001
2 2,0 小钱 002 =====》 小赵(001),小钱(002),小李(004)
4 4,0 小李 004
1、首先建立简化模型:假设老王有四个邻居,赵钱孙李,现在有四个小孩,小赵小钱小孙小李

2、建表:
(1)建立小区住户表
CREATE TABLE xiaoqv(
id INT NOT NULL,
name NVARCHAR(50) NOT NULL
)
小区里有五位住户,插入小区住户表
INSERT INTO xiaoqv VALUES
(0,'隔壁老王'),
(1,'赵'),
(2,'钱'),
(3,'孙'),
(4,'李')
(2)建立班级学生表
CREATE TABLE class (
id INT NOT NULL,
parentid NVARCHAR(50) NOT NULL,
name NVARCHAR(50) NOT NULL,
phone NVARCHAR(50) NOT NULL
)
班里有4位学生,根据住户确认,插入班级学生表
INSERT INTO class VALUES
(1,'1,0','小赵','1001'),
(2,'2,0','小钱','1002'),
(3,'3','小孙','1003'),
(4,'4,0','小李','1004')
当前表中的数据为;

3.建立查询
SELECT x.name AS name,
(SELECT STUFF((SELECT ','+ e.info
FROM (
SELECT ISNULL(name,'')+'('+ISNULL(xuehao,'*')+')' AS info FROM class c WHERE CHARINDEX(CONVERT(VARCHAR(50),x.id),c.parentid)>0
)e FOR XML PATH(''))
,1,1,'')
)AS children
FROM xiaoqv x

到这里就结束了
3.知识回顾
(1)字符串位置检索 charindex

(2)将表字段转化为xml表数据 for xml path('')

自定义分割格式

(3)字符串裁剪 stuff

看得出来,stuff(a,x,n,b)其意义为将字符串a从第x位开始,将其后的n位替换为 b
当然这里用 substring也可以,只是需要获取未知字符串长度,需要获取两次,代码比较臃肿,效率还低

全部sql语句
CREATE TABLE xiaoqv(
id INT NOT NULL,
name NVARCHAR(50) NOT NULL
) INSERT INTO xiaoqv VALUES
(0,'隔壁老王'),
(1,'赵'),
(2,'钱'),
(3,'孙'),
(4,'李') CREATE TABLE class (
id INT NOT NULL,
parentid NVARCHAR(50) NOT NULL,
name NVARCHAR(50) NOT NULL,
xuehao NVARCHAR(50) NOT NULL
)
INSERT INTO class VALUES
(1,'1,0','小赵',''),
(2,'2,0','小钱',''),
(3,'','小孙',''),
(4,'4,0','小李','') SELECT * FROM dbo.xiaoqv
SELECT * FROM dbo.class SELECT x.name AS name,
(SELECT STUFF((SELECT ','+ e.info
FROM (
SELECT ISNULL(name,'')+'('+ISNULL(xuehao,'*')+')' AS info FROM class c WHERE CHARINDEX(CONVERT(VARCHAR(50),x.id),c.parentid)>0
)e FOR XML PATH(''))
,1,1,'')
)AS children
FROM xiaoqv x SELECT CHARINDEX('','') SELECT name FROM class FOR XML PATH('') SELECT ','+name FROM class FOR XML PATH('') SELECT STUFF('',2,5,'') SELECT SUBSTRING('',2,LEN('')-1)
SQL Server 字符串合并的更多相关文章
- sql server 字符串替换函数REPLACE
sql server 字符串替换函数REPLACE函数的使用 <pre name="code" class="sql">--参数1:需要替换字符的母 ...
- sql server字符串的类型
sql server字符串分为不同的类型,下面就将为您介绍几个sql server字符串的常见类型,希望对您学习sql server字符串能有所帮助. nchar 此数据类型可存储1~4000个定长U ...
- sql server 字符串转成日期格式
在SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的.本文我们主要就介绍一下SQL Server日 ...
- [转]SQL Server字符串处理函数大全
select语句中只能使用sql函数对字段进行操作(链接sql server), select 字段1 from 表1 where 字段1.IndexOf("云")=1;这条语句不 ...
- SQL Server字符串左匹配
在SQL Server中经常会用到模糊匹配字符串的情况,最简单的办法就是使用like关键字(like语法http://msdn.microsoft.com/en-us/library/ms179859 ...
- SQL SERVER字符串函数
本篇文章还是学习<程序员的SQL金典>内容的记录,此次将讲解的是SQL SERVER的字符串函数. 其实数据库跟程序语言库一样,都会集成很多可以使用的API.这些API,如果你熟悉的话,将 ...
- Sql Server 字符串操作总结
SQL Server 支持两种字符数据类型---常规和Unicode:常规类型包括char 和varchar:unicode包括nchar 和nvarchar.常规的每个字符占用一个字节存储,而uni ...
- SQL Server ->> 字符串对比
今天同事问我关于SQL Server在字符串尾随着空格时进行字符串对比的做法.关于这个问题正好在这里讲一下,就是SQL Server是按照ANSI/ISO SQL-92中的定义做字符串对比的. 在KB ...
- sql server 字符串函数大全
平常会用到一些函数处理字符串,用的不算频繁,所以每次用到的时候就忘记了,这次在网上找了一篇文档,担心突然某一天这篇文章找不到了,然后就把文章的内容复制了一份: /* 1,ASCII返回字符表达式中最左 ...
随机推荐
- 爬虫6:pyquery库
强大又灵活的网页解析库,如果觉得正则写起来太麻烦,BeautifulSoup语法太难记,而你又熟悉jQuery的语法,那么用PyQuery就是最佳选择 一. 初始化 1. 字符串初始化 h ...
- 如何在CentOS 7上使用vsftpd(FTP)的配置文件介绍
vsftpd.conf - vsftpd的配置文件. 描述 vsftpd.conf可用于控制vsftpd行为的各个方面. 默认情况下,vsftpd在/etc/vsftpd.conf位置查找此文件. 但 ...
- Java网络编程以及简单的聊天程序
网络编程技术是互联网技术中的主流编程技术之一,懂的一些基本的操作是非常必要的.这章主要讲解网络编程,UDP和Socket编程,以及使用Socket做一个简单的聊天软件. 全部代码下载:链接 1.网络编 ...
- Cookie、session和localStorage的区别
一.Cookie.session和localStorage的区别 cookie的内容主要包括:名字.值.过期时间.路径和域.路径与域一起构成cookie的作用范围.若不设置时间,则表示这个cookie ...
- 解决无法运行Terminator出现以下问题: File "/usr/bin/terminator"...SyntaxError: invalid syntax
在安装或者启动Terminator时可能出现这个问题: lin@Dev:~$ terminator File "/usr/bin/terminator", line 123 exc ...
- linux centOS 7 GUI安装
centOS 7 GUI 图形用户界面(Graphical User Interface 克隆clone Windows中安装xshell和xftp传输软件 https://blog.csdn.net ...
- HttpClient 工具类
package com.sys.utils; import java.io.IOException; import java.net.URI; import java.util.ArrayList; ...
- 思科 ISR路由器登录内置交换模块的方式
ISR2900/3900系列 登录:Router#service-module gigabitethernet1/0 session 退出: control+shift+6 x disconnect ...
- 用Docker构建分布式Redis集群
[编者的话]本文介绍了如何使用Docker搭建Redis集群,很多读者都在问Docker能带来哪些实质性的好处,我想本文就是一个很好的例子.不使用Docker你也可以搭建Redis集群,那使用Dock ...
- springmvc执行原理及自定义mvc框架
springmvc是spring的一部分,也是一个优秀的mvc框架,其执行原理如下: (1)浏览器提交请求经web容器(比如tomcat)转发到中央调度器dispatcherServlet. (2)中 ...