1

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

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

IDis anINTValueis a VarChar,数据之间用逗号分隔。

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

在我的阅读中,听起来我必须使用光标来执行此操作——但如果可能的话,我想避免这种情况。有没有办法在不使用游标的情况下通过 case 语句或子查询来实现这一点?

最终结果将如下所示:

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

提前致谢。

4

2 回答 2

4

万一,你的记录没有说Apple:,你可以先找一下:

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

请参阅带有演示的 SQL Fiddle

于 2012-10-24T22:00:24.700 回答
2
SELECT ID, SUBSTRING(value, CHARINDEX('Apple: ',value)+7, 2)
    FROM YourTable
于 2012-10-24T21:50:45.383 回答