我在数据库中有一个表(我不允许修改),它以下列方式设置:
ID Value Column x...
0 Apple: GDGolden Delicious, Date Picked: 5/5/2012, Color: Yellow
1 Apple: GSGranny Smith, Date Picked: 3/24/2010, Color: Green
2 Apple: RDRed Delicious, Date Picked: 1/15/2012, Color: Red
3 Random Data, Apple: BRBrayburn, Date Picked: 2/15/2012, Color: Mixed
ID
是INT
,Value
是VarChar
,数据之间用逗号分隔。
对于表格中的每一行,我需要提取所列内容的子字符串,在本例中为每个水果品种(即GD,GS,RD,BR)的缩写,并将其放入临时表中包含该表中的所有其他列以及子字符串,但不包含Value
列中的其他数据。表中的每个子字符串缩写恰好是两个字符,但正如您在最后一行中看到的那样,它并不总是出现在列的开头。
在我的阅读中,听起来我必须使用光标来做到这一点 - 但如果可能的话,我想避免这样做。无论如何,如果不使用游标,通过case语句或子查询可能会实现这一点吗?
最终结果如下:
ID Value Column x Column y...
0 GD
1 GS
2 RD
3 BR
提前致谢。
答案 0 :(得分:4)
如果您的记录没有说明Apple:
,您可以查找第一个:
:
select id,
substring(value, charindex(':', value, 1) + 2, 2) value
from yourtable
答案 1 :(得分:2)
SELECT ID, SUBSTRING(value, CHARINDEX('Apple: ',value)+7, 2)
FROM YourTable