Sql Server数据把列根据指定内容拆分数据的方法实例

今天由于工作需要,需要把数据把列根据指定的内容拆分数据

其中一条数据实例

select id , XXXX FROM BIZ_PAPER where  id ='4af210ec675927fa016772bf7dd025b0'

拆分方法:

select t3.id ,t3.XXXX as XXXX from (
select A.id , B.XXXX from (
SELECT id, XXXX = CONVERT(xml,'<root><v>' + REPLACE(XXXX , ',', '</v><v>') + '</v></root>') FROM BIZ_PAPER) A
outer apply(
SELECT XXXX = N.v.value('.', 'varchar(100)') FROM A.XXXX .nodes('/root/v') N(v)) B) t3 where t3.id ='4af210ec675927fa016772bf7dd025b0'

结果

在自己研究这行代码之后,做出如下讲解,如果有错误的地方还请指教

SELECT id, XXXX = CONVERT(xml,'<root><v>' + REPLACE(XXXX , ',', '</v><v>') + '</v></root>') FROM BIZ_PAPER

这一行的重点在于CONVERT,XML是指类型,xml 数据类型实例拆分为关系数据,则 nodes() 方法非常有用,至于XML类型的数据,我后面进行补充

REPLACE 指按照 ' , ' 进行替换,并且按照指定的内容进行拼接

最后的结果为

outer apply

这个就是表的关联,就像是left join ,但是没有on 作为关联条件,所以通过拆分之后多出来的数据就是通过这个进行关联后产生的

 SELECT XXXX = N.v.value('.', 'varchar(100)') FROM A.XXXX .nodes('/root/v') N(v)

N.v.value('.','varchar(100)'),N是表,别名,v是列,value函数是读取标签之间的值,对于这个列子,读取的为<v>和</v>中间的值;这个可以去了解 xml类型的常用的三个方法 :value()、nodes()、exist()

value的第一个参数是一个字符串文字,从 XML 实例内部检索数据。 XQuery 必须最多返回一个值。 否则,将返回错误;

value的第二个参数是指将查询结果转化为何种类型的数据。

此处,'.'表示当前目录,即<v>目录,另外'..'表示上级目录,'/'表示根目录,这个跟Linux是一样的

总的来说,这个语句的重点在于xml类型的使用和outer apply的使用,其他的都很好理解。这个就是我自己理解后的讲解,部分位置我自己也还没有理解透

总结

到此这篇关于Sql Server数据把列根据指定内容拆分数据的文章就介绍到这了,更多相关SqlServer数据列根据内容拆分数据内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SQL Server实现将特定字符串拆分并进行插入操作的方法

    本文实例讲述了SQL Server实现将特定字符串拆分并进行插入操作的方法.分享给大家供大家参考,具体如下: --循环执行添加操作 declare @idx as int While Len(@UserList) > 0 Begin Set @idx = Charindex(',', @UserList); --只有一条数据 If @idx = 0 and Len(@UserList) > 0 Begin Insert Into BIS_MsgCenterInfo(ID,MsgID,UserI

  • sqlserver2008 拆分字符串

    --说明:例如,将下列数据 id id_value ----------------- 1 'aa,bb' 2 'aa,bb,cc' 3 'aaa,bbb,ccc' --转换成以下的格式 id id_value ----------------- 1 'aa' 1 'bb' 2 'aa' 2 'bb' 2 'cc' 3 'aaa' 3 'bbb' 3 'ccc' --代码-------------------------------------------GO 复制代码 代码如下: create

  • SqlServer下通过XML拆分字符串的方法

    复制代码 代码如下: DECLARE @idoc int; DECLARE @doc xml; set @doc=cast('<Root><item><ProjID>'+replace(@SelectedProjectArray,',','</ProjID></item><item><ProjID>')+'</ProjID></item></Root>' as xml) EXEC sp_

  • Sql Server数据把列根据指定内容拆分数据的方法实例

    今天由于工作需要,需要把数据把列根据指定的内容拆分数据 其中一条数据实例 select id , XXXX FROM BIZ_PAPER where  id ='4af210ec675927fa016772bf7dd025b0' 拆分方法: select t3.id ,t3.XXXX as XXXX from ( select A.id , B.XXXX from ( SELECT id, XXXX = CONVERT(xml,'<root><v>' + REPLACE(XXXX

  • SQL 在自增列插入指定数据的操作方法

    SQL Server  中数据表往往会设置自增列,常见的比如说 首列的ID列. 往数据表插入新数据的时候,自增列是跳过的,无需插入即会按照设置的自增规则进行列增长.那么,如果我们想往自增列插入我们指定的数据时该怎么做呢? 一:建立一张简单的测试表 CREATE TABLE randy_test (id INT IDENTITY ( 1 , 1 ), num INT ) 二:如果强行插入数据时: INSERT INTO randy_test VALUES (1,11) 消息 8101,级别 16,

  • SQL Server 2012使用Offset/Fetch Next实现分页数据查询

    在Sql Server 2012之前,实现分页主要是使用ROW_NUMBER(),在SQL Server2012,可以使用Offset ...Rows  Fetch Next ... Rows only的方式去实现分页数据查询. select [column1] ,[column2] ... ,[columnN] from [tableName] order by [columnM] offset (pageIndex-1)*pageSize rows fetch next pageSize r

  • 简析SQL Server数据库用视图来处理复杂的数据查询关系

    SQL Server数据库用视图来处理复杂的数据查询关系是本文我们主要要介绍的内容,该内容是这样想到的:在辅助教务系统那块的时候,我做的一个页面是对单个老师和整个学院老师的工作量查询,这个操作设计到了三个本数据库中的表和一个不同数据库中的一个教师信息表,如果用普通的SQL语句是非常难实现的,由于我刚开始做的视频播放系统,数据库的表相对比较少,没有涉及到这么复杂的处理关系,刚开始感觉很难. 后来想到用视图可以解决多个表的复杂关系,但是另外一张表是不同数据库的,是否依然能进行操作,经过测试之后,居然

  • python实现选取或删除指定列包含指定内容的行

    目录 选取或删除指定列包含指定内容的行 选取所有货币代号为1的行 选取所有货币代号列内容为1的数据 选取所有货币代号列内容不为1的数据 删除含有特定数值的行 选取或删除指定列包含指定内容的行 选取所有货币代号为1的行 数据读取 source_df= pd.read_excel('EXCEL2019-06-05.xls') 打印数据,查看数据长度 print(source_df.head()) print(len(source_df)) 选取所有货币代号列内容为1的数据 data_ = sourc

  • 安装sql server 2008时的4个常见错误和解决方法

    可能由于操作系统不同,或者在安装SQL 2008的时候已经安装SQL其他版本,因此可能会遇到问题,那么这时我们的实际经验和动手测试的能力也是非常重要的,这样才能少走弯路. 问题1:安装sql server 2008 R2,安装过程中提示错误:此计算机上安装了 Microsoft Visual Studio 2008 的早期版本.请在安装 SQL Server 2008 前将 Microsoft Visual Studio 2008 升级到 SP1. 之前我的电脑上确实装了vs2008,于是我准

  • SQL Server实现用触发器捕获DML操作的会话信息【实例】

    需求背景 上周遇到了这样一个需求,维护人员发现一个表的数据经常被修改,由于历史原因:文档缺少:以及维护人员的经常变更,导致他们对系统也业务也不完全熟悉,他们也不完全清楚哪些系统和应用程序会对这个表的数据进行操作.现在他们想找出有哪些服务器,哪些应用程序会对这个表进行INSERT.UPDATE操作.那么问题来了,怎么去解决这个问题呢? 解决方案 由于数据库版本是标准版,我们选择了使用触发器来捕获进行DML操作的会话的相关信息,例如,Host_Name.Program_Name等 ,选择触发器是因为

  • sql server编写通用脚本实现获取一年前日期的方法

    问题: 在数据库编程开发中,有时需要获取一年前的日期,以便以此为时间的分界点,查询其前后对应的数据量.例如: 1. 想查询截止到一年前当天0点之前的数据量,以及一年前当天0点开始到现在的数据量. 2. 想查询截止到一年前当天24点之前的数据量,以及一年前当天24点开始到现在的数据量. 3. 想查询截止到一年前当月1日0点之前的数据量,以及一年前当月1日0点开始到现在的数据量. 4. 想查询截止到一年前当月最后一天24点之前的数据量,以及一年前当月最后一天24点开始到现在的数据量. 以上这四种情况

  • SQL Server 2005 企业版没有 Management Studio管理工具的解决方法

    在网上找找了半天有以下几种情况: 1.可以直接装上,装上就有. 2.装上后没有,然后把sql 2005全部卸载后再装就有了. 3.装上后没有,从微软官方网站上下载一下:Microsoft SQL Server Management Studio Express, 装上就可以用了. 4.重装系统,先装SQL Server 2005,再装vs2008 看到上面的方法,对我来说可能只有第三种是最好的了,但他是Express,我这人好像有个这个缺 点,如果他不是最好的,而别人可以做到最好的,我就一定要让

  • sql server定时作业调用Kettle job出错的快速解决方法

    错误信息: Unable to list jar files in plugin folder 'C:\Windows\system32\config\systemprofile\.kettle\plugins' Unable to get VFS File object for filename 'C:\Windows\system32\config\systemprofile\.kettle\plugins' : Could not find file with URI "C:\Window

随机推荐