--关于新方法解决字符串替换和拆分问题的总结
-->TravyLee生成测试数据:[test]
if object_id('[test]') is not null
drop table [test]
create table [test](
[ID] int,
[CODE1] varchar(2),
[CODE2] varchar(10)
)
insert [test]
select 1,'AA','AA BB CC' union all
select 2,'BB','FF EE DD'with T (id,[CODE1],P1,P2) as
(select id,[CODE1],charindex(' ',' '+[CODE2]),charindex(' ',[CODE2]+' ')+1 from testunion allselect a.id,a.CODE1,b.P2,charindex(' ',[CODE2]+' ',b.P2)+1 from test  a join T b on a.id=b.id where charindex(' ',[CODE2]+' ',b.P2)>0
)
select a.id,a.CODE1,name=substring(a.[CODE2]+' ',b.P1,b.P2 - b.P1 - 1)
from test a
join T b
on a.id=b.id
order by 1
/*
id    CODE1    name
--------------------------
1    AA    AA
1    AA    BB
1    AA    CC
2    BB    FF
2    BB    EE
2    BB    DD
*/--> 测试数据:[A1]
if object_id('[A1]') is not null
drop table [A1]
create table [A1](
[编码] varchar(2),
[内容] varchar(1)
)
insert [A1]
select '01','a' union all
select '02','b' union all
select '03','c' union all
select '04','d' union all
select '05','e'
--> 测试数据:[B2]
if object_id('[B2]') is not null
drop table [B2]
create table [B2](
[id] int,
[内容] varchar(11)
)
insert [B2]
select 1,'01,05' union all
select 2,'02' union all
select 3,'01,03' union all
select 4,'02,05' union all
select 5,'01,02,03' union all
select 6,'01,02,04,05' union all
select 7,'02,04'
gowith t
as(
select b.id,a.内容
from [B2] b
inner join [A1] a
on CHARINDEX(a.编码,b.内容)>0
)
select a.id,内容=stuff((SELECT ','+内容
from t
where a.id=t.id for xml path('')),1,1,'')
from t  a
group by a.id
/*
id    内容
----------------------
1    a,e
2    b
3    a,c
4    b,e
5    a,b,c
6    a,b,d,e
7    b,d
*//*整理人:中国风(Roy) 日期:2008.06.06
*/--> --> (Roy)生成測試數據 if not object_id('Tab') is null drop table Tab
Go
Create table Tab(
[Col1] int,
[Col2] nvarchar(1)
)
Insert Tab
select 1,N'a' union all
select 1,N'b' union all
select 1,N'c' union all
select 2,N'd' union all
select 2,N'e' union all
select 3,N'f'
Go --合并表: --SQL2000用函数: go
if object_id('F_Str') is not null drop function F_Str
go
create function F_Str(@Col1 int)
returns nvarchar(100)
as
begin declare @S nvarchar(100) select @S=isnull(@S+',','')+Col2 from Tab where Col1=@Col1 return @S
end
go
Select distinct Col1,Col2=dbo.F_Str(Col1) from Tab go --SQL2005用XML: --方法1: select a.Col1,Col2=stuff(b.Col2.value('/R[1]','nvarchar(max)'),1,1,'')
from (select distinct COl1 from Tab) a
Cross apply (select COl2=(select N','+Col2 from Tab where Col1=a.COl1 For XML PATH(''), ROOT('R'), TYPE))b --方法2: select a.Col1,COl2=replace(b.Col2.value('/Tab[1]','nvarchar(max)'),char(44)+char(32),char(44))
from (select distinct COl1 from Tab) a
cross apply (select Col2=(select COl2 from Tab  where COl1=a.COl1 FOR XML AUTO, TYPE) .query(' <Tab> {for $i in /Tab[position() <last()]/@COl2 return concat(string($i),",")} {concat("",string(/Tab[last()]/@COl2))} </Tab>') )b --SQL05用CTE: ;with roy as(select Col1,Col2,row=row_number()over(partition by COl1 order by COl1) from Tab)
,Roy2 as
(
select COl1,cast(COl2 as nvarchar(100))COl2,row
from Roy
where row=1
union all
select a.Col1,cast(b.COl2+','+a.COl2 as nvarchar(100)),a.row
from Roy a
join Roy2 b
on a.COl1=b.COl1 and a.row=b.row+1)
select Col1,Col2
from Roy2 a
where row=(select max(row) from roy where Col1=a.COl1)
order by Col1
option (MAXRECURSION 0) 生成结果:
/*
Col1        COl2
----------- ------------
1          a,b,c
2          d,e
3          f (3 行受影响)
*/ --> --> (Roy)生成測試數據if not object_id('Tab') is nulldrop table Tab
Go
Create table Tab([Col1] int,[COl2] nvarchar(5))
Insert Tab
select 1,N'a,b,c' union all
select 2,N'd,e' union all
select 3,N'f'
Go--SQL2000用辅助表:
if object_id('Tempdb..#Num') is not nulldrop table #Num
go
select top 100 ID=Identity(int,1,1) into #Num
from syscolumns a,syscolumns b
Select a.Col1,COl2=substring(a.Col2,b.ID,charindex(',',a.Col2+',',b.ID)-b.ID)
from Tab a,#Num b
wherecharindex(',',','+a.Col2,b.ID)=b.ID --也可用 substring(','+a.COl2,b.ID,1)=','
--2000不使用辅助表
Selecta.Col1,COl2=substring(a.Col2,b.number,charindex(',',a.Col2+',',b.number)-b.number)
from Tab a
join master..spt_values  b
ON B.type='p' AND B.number BETWEEN 1 AND LEN(A.col2)
wheresubstring(','+a.COl2,b.number,1)=','--Xml方法select a.COl1,b.Col2
from (select Col1,COl2=convert(xml,'<root><v>'+replace(COl2,',','</v><v>')+'</v></root>') from Tab)a
outer apply(select Col2=C.v.value('.','nvarchar(100)') from a.COl2.nodes('/root/v')C(v))b/*
Col1        COl2
----------- -----
1           a
1           b
1           c
2           d
2           e
3           f
*/

关于字符串拆分,合并问题的整理相关推荐

  1. excel split函数_Excel 字符串拆分

    用 Excel 处理数据时,有时需要对字符串进行拆分.对于比较简单的拆分,使用 Excel 函数可以顺利完成,但碰到一些特殊需求,或者拆分的规则比较复杂时,则很难用 Excel 实现了.这里列出一些拆 ...

  2. python处理Excel实现自动化办公教学(数据筛选、公式操作、单元格拆分合并、冻结窗口、图表绘制等)【三】

    相关文章: python处理Excel实现自动化办公教学(含实战)[一] python处理Excel实现自动化办公教学(含实战)[二] python处理Excel实现自动化办公教学(数据筛选.公式操作 ...

  3. JAVA POI拆分合并的单元格

    JAVA POI拆分合并的单元格 最近项目中需要做一个导入功能,但是EXCEL数据有合并单元格的情况出现,导入的数据需要直接入库,合并单元格的数据首行会有数据,但次行的值为空.见下图 需要获取C列和E ...

  4. 每日一题(字符串拆分)

    前言:为了让小伙伴更方便的学习编程语言,小白每天都会分享一道编程题.小白也创建了一个微信公众号,会同步更新题目和相关的视觉领域的知识,如果小伙伴不方便在网页上阅读文章,可以关注微信公众号"小 ...

  5. 在Bash中将字符串拆分为数组

    本文翻译自:Split string into an array in Bash In a Bash script I would like to split a line into pieces a ...

  6. c将字符串拆分,并存入结构体

    c将字符串拆分,并存入结构体 函数功能 代码实现 结果显示 函数功能 字符串格式:type=0&u=user1&p=pass1 结构体格式: typedef struct{unsign ...

  7. python两列字符串合并_python两列字符串如何合并?

    python两列字符串如何合并?,字符串,变量,方法,语句,就没 python两列字符串如何合并? python两列字符串如何合并? python两列字符串合并的方法: 1.在很多情况下,我们都需要合 ...

  8. UTF-8编码的字符串拆分成单字、获取UTF-8字符串的字符个数的代码及原理(c++实现)...

    一.字符编码简单介绍 1. ASCII码 在计算机内部,全部的信息终于都表示为一个二进制的字符串.每个二进制位(bit)有0和1两种状态,因此八个二进制位就能够组合出256种状态,这被称为一个字节(b ...

  9. boost::regex模块将字符串拆分为标记的测试程序

    boost::regex模块将字符串拆分为标记的测试程序 实现功能 C++实现代码 实现功能 boost::regex模块将字符串拆分为标记的测试程序 C++实现代码 #include <boo ...

  10. 第十八章 4string 字符串的合并

    #include <iostream> #include <string> using namespace std; int main() {//char字符数组的的合并cha ...

最新文章

  1. ESXi 6.5 进入维护模式死机在68%的进度的bug
  2. 递归查询mysql数据库设计
  3. web developer tips (37):如何组织Using指令
  4. Got a packet bigger than 'max_allowed_packet' bytes
  5. java中bubblesort是什么意思_排序--冒泡排序BubbleSort(Java)
  6. 微软 python教程_最强福利——来自微软的Python学习教程(开发指南)
  7. rdd转换成java数据结构_如何将CSV文件转换为RDD
  8. 组织机构代码输入测试用例_测试代码以用于过大的输入
  9. python可变参数教学,Python函数可变参数详解
  10. Linux环境下的JFreeChart中文乱码问题解决办法
  11. stm32——modbus例程网址收藏
  12. oracle数据库连接违反,Oracle 数据库连接的一些坑
  13. 《计算机组成原理》数据传送类指令不包括( ),兰大《计算机组成原理》20秋平时作业1【标准答案】...
  14. Cucumber常用关键字
  15. word绘制表格三斜线表头
  16. 使用hexo+github搭建免费个人博客详细教程
  17. 第一次使用MFC开发桌面小程序
  18. java cap是什么_分布式CAP是什么?它的原理是什么?
  19. python骂人的程序_让你的python程序尖叫起来
  20. 苹果cms怎么采集别人网站的视频

热门文章

  1. 可滚动且可排序的表格
  2. 正点原子-freeRTOS
  3. 九江学院计算机专业好就业吗,九江学院好就业吗?九江学院就业率怎么样?
  4. java编程思想书籍阅读_java编程思想-读书摘要(一)
  5. 准备报考信息系统项目管理工程师中级职称
  6. 计算机错误代码0x8e5e0211,Windows Update的两个简易修复错误代码0x80072efe | MOS86
  7. PHP是核心思路,模拟OICQ的实现思路和核心程序(一)_php基础
  8. 计算机配置管理模板怎么重装,电脑重装与功能设置.docx
  9. 最简分式——C语言程序设计入门
  10. linux下如何安装自带编译器的codeblocks,在Ubuntu 16.04系统中使用PPA源安装Code Blocks的方法...