您所在的位置: 首页>>读书频道>>数据库>>SQL Server>>

4.6.2 分解字符串

http://book.51cto.com  2008-03-21 12:47  邹建 编著  人民邮电出版社  我要评论(0)
  • 摘要:《深入浅出——SQL Server 2005开发、管理与应用实例》本书以SQL Server 2005增加(或增强)的功能为着眼点,从应用、开发和管理3个角度逐步深入,全面介绍SQL Server 2005数据库技术。第四章主要介绍在SQL SERVER 2005中,如何操作和生成xml类型的数据。本文写的是分解字符串。
  • 标签:SQL  Server  xml  深入浅出

4.6.2 分解字符串

分解字符串为行集,是一个与合并行相反的过程,借助xml数据类型方法,分解字符串为行集也是一件比较容易的事。

下面的示例演示如何使用xml类型类型方法来分拆字符串。示例产生定义了一个测试数据,在这个测试数据中,child_ids列包含多个id,每个id以逗号分隔。要求将该列的每个id分拆出来,并与对应的sort_id形成新的记录行。要通过xml类型的方法实现拆分,产生必须将child_ids列值转换为xml数据类型,实现这种转换,笔者使用了字符串处理函数REPLACT实现。需要注意的是,在转换成xml类型的处理中,这里使用了CDATA指令,在本示例中,是否使用CDATA指令并不重要,但在处理复杂的字符串时,CDATA指令是非常重要的,它可以避免字符串中的特殊字符(例如“<”、“>”这类标记符号)对转换的影响。

-- 1. 定义示例数据
DECLARE @tb TABLE(
sort_id int,
child_ids varchar(max))
INSERT @tb(
sort_id, child_ids)
SELECT 1, '1,2,4' UNION ALL
SELECT 2, '2,34,5,55'

-- 2. 将child_ids 中的各id 值分拆为行集
SELECT
A.sort_id,
B.child_id
FROM(
SELECT
sort_id,
child_ids = CONVERT(xml,
'>')

FROM @tb
)A
OUTER APPLY(
SELECT 
child_id = T.c.value('.[1]', 'int')
FROM A.child_ids.nodes('/r/c') T(c)
)B

上述示例的执行结果如下:

sort_id     child_id
----------- -----------
1           1
1           2
1           4
2           2
2           34
2           5
2           55

(7 行受影响)

【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节
深入SQL Server 2008
如何有效防御SQL注入攻击
Sun以10亿美元并购开源数据库厂商MySQL
Windows Home Server 家用服务器专题
文档格式标准开战 OOXML成国际标准
 
 验证码: (点击刷新验证码)   匿名发表
  • 野蛮生长

  • 作者:冯仑著
  • “地产界的思想家”冯仑纵横生意江湖20年来,第一次系统梳理出书。  三十年来中国民营企业从前公司时代发展到公司时代,21..
Copyright©2005-2008 51CTO.COM 版权所有