22,206
社区成员
发帖
与我相关
我的任务
分享
DECLARE @B TABLE([log] VARCHAR(8000))
INSERT @B SELECT
'由 张三 于 2008-9-22 将 [客户名称] 由 CSDN有限公司 改为 CSDN有限公司; 由 李四 于 2009-10-12 将 [客户名称] 由 CSDN有限公司 改为 CSDN有限公司;'
DECLARE @A TABLE([A] VARCHAR(8000))
INSERT @A SELECT
'CSDN有限公司'
UPDATE @B SET [LOG]=REPLACE([LOG],A,'') FROM @A WHERE CHARINDEX(A,[LOG])>0
SELECT * FROM @B
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
log
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
由 张三 于 2008-9-22 将 [客户名称] 由 改为 ; 由 李四 于 2009-10-12 将 [客户名称] 由 改为 ;
(所影响的行数为 1 行)
???????????????/*
标题:数据拆分1
作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)
时间:2008-11-20
地点:广东深圳
描述
有表tb, 如下:
id value
----------- -----------
1 aa,bb
2 aaa,bbb,ccc
欲按id,分拆value列, 分拆后结果如下:
id value
----------- --------
1 aa
1 bb
2 aaa
2 bbb
2 ccc
*/
--1. 旧的解决方法(sql server 2000)
SELECT TOP 8000 id = IDENTITY(int, 1, 1) INTO # FROM syscolumns a, syscolumns b
SELECT A.id, value = SUBSTRING(A.[value], B.id, CHARINDEX(',', A.[value] + ',', B.id) - B.id)
FROM tb A, # B
WHERE SUBSTRING(',' + A.[value], B.id, 1) = ','
DROP TABLE #
--2. 新的解决方法(sql server 2005)
create table tb(id int,value varchar(30))
insert into tb values(1,'aa,bb')
insert into tb values(2,'aaa,bbb,ccc')
go
SELECT A.id, B.value
FROM(
SELECT id, [value] = CONVERT(xml,'<root><v>' + REPLACE([value], ',', '</v><v>') + '</v></root>') FROM tb
)A
OUTER APPLY(
SELECT value = N.v.value('.', 'varchar(100)') FROM A.[value].nodes('/root/v') N(v)
)B
DROP TABLE tb
/*
id value
----------- ------------------------------
1 aa
1 bb
2 aaa
2 bbb
2 ccc
(5 行受影响)
*/