|
2
|
| TheSoftwareJedi jac · 技术社区 · 17 年前 |
|
|
1
9
看看这个函数。我在Oracle中做过类似的拆分和转置数据的技巧。循环数据,将解码值插入临时表。修道院的事情是,MS会让你在运行中做到这一点,而Oracle需要一个显式的临时表。
MS SQL Split Function
作者编辑: 这工作得很好。最终代码看起来像这样(在创建split函数后):
|
|
2
5
根据您的表格:
创建一个新表,如下所示:
这将返回您想要的内容:
编辑
我添加了“LTRIM()”,以便正确处理颜色列表中的空格:“红、蓝、绿”。他的解决方案不需要空格“红、蓝、绿”。此外,我更喜欢使用自己的Number表,而不是使用master.dbo.spt_values,这也允许删除一个派生表。
以下是我的结果集:
|
|
3
4
你可以试试这个,不需要任何额外的功能: declare @t table (col1 varchar(10), col2 varchar(200))
insert @t
select '1', 'red,blue,green'
union all select '2', NULL
union all select '3', 'green,purple'
select col1, left(d, charindex(',', d + ',')-1) as e from (
select *, substring(col2, number, 200) as d from @t col1 left join
(select distinct number from master.dbo.spt_values where number between 1 and 200) col2
on substring(',' + col2, number, 1) = ',') t
|
|
|
4
0
通过使用它,可以写成如下。
|
|
|
5
0
如果可能的话,修复你的数据库。数据库单元格中以逗号分隔的列表在99%或更多情况下表示架构有缺陷。 |
|
|
6
0
http://msdn.microsoft.com/en-us/library/ms254508(VS.80).aspx 这样做的原因是CLR代码在解析字符串(计算工作)方面会做得更好,并且可以将该信息作为一个集合传递回去,这就是SQL Server真正擅长的(集合管理)。 CLR函数将根据解析的值(和输入id值)返回一系列记录。
|
|
|
7
0
|