SQL Server:从表中的每一行中选择一个子字符串

时间:2012-10-24 21:41:11

标签: sql-server iteration

我在数据库中有一个表(我不允许修改),它以下列方式设置:

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

IDINTValueVarChar,数据之间用逗号分隔。

对于表格中的每一行,我需要提取所列内容的子字符串,在本例中为每个水果品种(即GD,GS,RD,BR)的缩写,并将其放入临时表中包含该表中的所有其他列以及子字符串,但不包含Value列中的其他数据。表中的每个子字符串缩写恰好是两个字符,但正如您在最后一行中看到的那样,它并不总是出现在列的开头。

在我的阅读中,听起来我必须使用光标来做到这一点 - 但如果可能的话,我想避免这样做。无论如何,如果不使用游标,通过case语句或子查询可能会实现这一点吗?

最终结果如下:

ID  Value  Column x  Column y...
0   GD     
1   GS     
2   RD     
3   BR     

提前致谢。

2 个答案:

答案 0 :(得分:4)

如果您的记录没有说明Apple:,您可以查找第一个:

select id, 
  substring(value, charindex(':', value, 1) + 2, 2) value
from yourtable

请参阅SQL Fiddle with Demo

答案 1 :(得分:2)

SELECT ID, SUBSTRING(value, CHARINDEX('Apple: ',value)+7, 2)
    FROM YourTable