SQL Server和C#中每条记录的字符串处理

时间:2013-12-06 04:52:22

标签: c# sql .net sql-server sql-server-2008

我有这张表Components

ItemNo  ItemDescription                Type
  1     Apple Fruit 20Kg               null
  2     Carrot Veg  1Kg                null
  3     Fig DryFruit 100g              null

要求是,对于每个ItemDescription,我确定其是Fruit还是DryFruit,我将值fruit插入到列Type中。如果其类型为Veg,则我将值Vegetable放入列Type

结果表如下所示:

ItemNo  ItemDescription                Type
  1     Apple Fruit 20Kg               Fruit
  2     Carrot Veg  1Kg                Vegetable
  3     Fig DryFruit 100g              Fruit

我如何实现这一目标?

使用C#代码:

var itemDescription = GetAllItemDescription() //Executes  'select ItemDescription from Components;' SQL query
itemDescription.ForEach(item=>{
     if(item.Contains("Fruit") || item.Contains("DryFruit"))
     {
        EnterFruitInTypeColumn() //contains sql query which does the corresponding stuff.
     }
    ........
}

问题是:

如何仅使用SQL语句执行相同的操作?

(我也知道有T-SQL string processing stuffs,但无法满足上述要求)

3 个答案:

答案 0 :(得分:3)

与其他答案一样,这应该可以帮助你:

UPDATE Components
SET [Type] = CASE WHEN CHARINDEX('DryFruit', ItemDescription) > 0 THEN 'Fruit'
                  WHEN CHARINDEX('Veg', ItemDescription) > 0 THEN 'Vegetable'
                  WHEN CHARINDEX('Fruit', ItemDescription) > 0 THEN 'Fruit'
                  ELSE null
             END

答案 1 :(得分:1)

以下查询可以。

UPDATE Components 
SET [TYPE] = 'FRUIT'
WHERE ItemDescription LIKE '%Fruit%'

您必须重写所有类型的查询。

答案 2 :(得分:1)

请尝试:

update Components
set [Type]=(case when charindex('Fruit', ItemDescription,0)>0 then 'Fruit'
            else 'Vegetable' end)