您的位置:首页 > 其它

有规律字段拆分(2005的解决方案)

2010-04-08 19:55 169 查看
问题描述:

–有表tb, 如下:

id values

———– ———–

1 aa,bb

2 aaa,bbb,ccc

–欲按,分拆values列, 分拆后结果如下:

id value

———– ——–

1 aa

1 bb

2 aaa

2 bbb

2 ccc

–1. 旧的解决方法

Select TOP 8000

id = IDENTITY(int, 1, 1)

INTO #

FROM syscolumns a, syscolumns b

Select

A.id,

SUBSTRING(A.[values], B.id, CHARINDEX(‘,’, A.[values] + ‘,’, B.id) –
B.id)

FROM tb A, # B

Where SUBSTRING(‘,’ + A.[values], B.id, 1) = ‘,’

Drop TABLE #

– 2. 在SQL Server2005中使用的方法如下:

– 示例数据

DECLARE @t TABLE(id int, [values] varchar(100))

Insert @t Select 1, ‘aa,bb’

UNION ALL Select 2, ‘aaa,bbb,ccc’

– 查询处理

Select

A.id, B.value

FROM(

Select id, [values] = CONVERT(xml,

’<root><v>’ + REPLACE([values], ‘,’,
‘</v><v>’) + ‘</v></root>’)

FROM @t

)A

OUTER APPLY(

Select value = N.v.value(‘.’, ‘varchar(100)’)

FROM A.[values].nodes(‘/root/v’) N(v)

)B

/*–结果

id value

———– ——–

1 aa

1 bb

2 aaa

2 bbb

2 ccc

(5 行受影响)

–*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: