关于字符串拆分,合并问题的整理
--关于新方法解决字符串替换和拆分问题的总结
-->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
*/
关于字符串拆分,合并问题的整理相关推荐
- excel split函数_Excel 字符串拆分
用 Excel 处理数据时,有时需要对字符串进行拆分.对于比较简单的拆分,使用 Excel 函数可以顺利完成,但碰到一些特殊需求,或者拆分的规则比较复杂时,则很难用 Excel 实现了.这里列出一些拆 ...
- python处理Excel实现自动化办公教学(数据筛选、公式操作、单元格拆分合并、冻结窗口、图表绘制等)【三】
相关文章: python处理Excel实现自动化办公教学(含实战)[一] python处理Excel实现自动化办公教学(含实战)[二] python处理Excel实现自动化办公教学(数据筛选.公式操作 ...
- JAVA POI拆分合并的单元格
JAVA POI拆分合并的单元格 最近项目中需要做一个导入功能,但是EXCEL数据有合并单元格的情况出现,导入的数据需要直接入库,合并单元格的数据首行会有数据,但次行的值为空.见下图 需要获取C列和E ...
- 每日一题(字符串拆分)
前言:为了让小伙伴更方便的学习编程语言,小白每天都会分享一道编程题.小白也创建了一个微信公众号,会同步更新题目和相关的视觉领域的知识,如果小伙伴不方便在网页上阅读文章,可以关注微信公众号"小 ...
- 在Bash中将字符串拆分为数组
本文翻译自:Split string into an array in Bash In a Bash script I would like to split a line into pieces a ...
- c将字符串拆分,并存入结构体
c将字符串拆分,并存入结构体 函数功能 代码实现 结果显示 函数功能 字符串格式:type=0&u=user1&p=pass1 结构体格式: typedef struct{unsign ...
- python两列字符串合并_python两列字符串如何合并?
python两列字符串如何合并?,字符串,变量,方法,语句,就没 python两列字符串如何合并? python两列字符串如何合并? python两列字符串合并的方法: 1.在很多情况下,我们都需要合 ...
- UTF-8编码的字符串拆分成单字、获取UTF-8字符串的字符个数的代码及原理(c++实现)...
一.字符编码简单介绍 1. ASCII码 在计算机内部,全部的信息终于都表示为一个二进制的字符串.每个二进制位(bit)有0和1两种状态,因此八个二进制位就能够组合出256种状态,这被称为一个字节(b ...
- boost::regex模块将字符串拆分为标记的测试程序
boost::regex模块将字符串拆分为标记的测试程序 实现功能 C++实现代码 实现功能 boost::regex模块将字符串拆分为标记的测试程序 C++实现代码 #include <boo ...
- 第十八章 4string 字符串的合并
#include <iostream> #include <string> using namespace std; int main() {//char字符数组的的合并cha ...
最新文章
- ESXi 6.5 进入维护模式死机在68%的进度的bug
- 递归查询mysql数据库设计
- web developer tips (37):如何组织Using指令
- Got a packet bigger than 'max_allowed_packet' bytes
- java中bubblesort是什么意思_排序--冒泡排序BubbleSort(Java)
- 微软 python教程_最强福利——来自微软的Python学习教程(开发指南)
- rdd转换成java数据结构_如何将CSV文件转换为RDD
- 组织机构代码输入测试用例_测试代码以用于过大的输入
- python可变参数教学,Python函数可变参数详解
- Linux环境下的JFreeChart中文乱码问题解决办法
- stm32——modbus例程网址收藏
- oracle数据库连接违反,Oracle 数据库连接的一些坑
- 《计算机组成原理》数据传送类指令不包括( ),兰大《计算机组成原理》20秋平时作业1【标准答案】...
- Cucumber常用关键字
- word绘制表格三斜线表头
- 使用hexo+github搭建免费个人博客详细教程
- 第一次使用MFC开发桌面小程序
- java cap是什么_分布式CAP是什么?它的原理是什么?
- python骂人的程序_让你的python程序尖叫起来
- 苹果cms怎么采集别人网站的视频
热门文章
- 可滚动且可排序的表格
- 正点原子-freeRTOS
- 九江学院计算机专业好就业吗,九江学院好就业吗?九江学院就业率怎么样?
- java编程思想书籍阅读_java编程思想-读书摘要(一)
- 准备报考信息系统项目管理工程师中级职称
- 计算机错误代码0x8e5e0211,Windows Update的两个简易修复错误代码0x80072efe | MOS86
- PHP是核心思路,模拟OICQ的实现思路和核心程序(一)_php基础
- 计算机配置管理模板怎么重装,电脑重装与功能设置.docx
- 最简分式——C语言程序设计入门
- linux下如何安装自带编译器的codeblocks,在Ubuntu 16.04系统中使用PPA源安装Code Blocks的方法...