代码之家  ›  专栏  ›  技术社区  ›  Eric Ness

替换SQL查询中的多个字符串

  •  12
  • Eric Ness  · 技术社区  · 16 年前

    我在SQL Server中编写了一个SQL查询,其中我需要用一个字符串值替换多个字符串值。例如

    Product     Quantity
    -------     --------
    Apple       2
    Orange      3
    Banana      1
    Vegetable   7
    Dairy       6
    

    将成为

    Product     Quantity
    -------     --------
    Fruit       2
    Fruit       3
    Fruit       1
    Vegetable   7
    Dairy       6
    

    我知道如何做到这一点的唯一方法是在select子句中使用嵌套替换。

    SELECT
      REPLACE('Banana', REPLACE('Orange', REPLACE('Banana', Product, 'Fruit'),
               'Fruit'), 'Fruit') AS Product
    FROM
      Table
    

    有更简单的方法吗?

    编辑:产品类别中可能有其他值。请参见上面编辑的示例。

    7 回复  |  直到 8 年前
        1
  •  20
  •   Joel Coehoorn    16 年前

    Bradc有迄今为止最好的答案,但如果您由于某种原因无法创建附加表,我想发布Kibbee答案的改编:

    SELECT
        CASE WHEN Product IN ('Banana', 'Apple', 'Orange') Then 'Fruit'
        ELSE Product END 
    FROM [Table]
    
        2
  •  11
  •   BradC    16 年前

    创建一个新的“类别”表,其中包含产品列表以及它们所属的“类别”。

    然后做一个内部连接。

        3
  •  7
  •   Kibbee    16 年前
    Select
    Case Product WHEN 'Banana' Then 'Fruit'
    WHEN 'Apple' Then 'Fruit'
    WHEN 'Orange' Then 'Fruit'
    ELSE Product
    END
    FROM Table
    
        4
  •  1
  •   Rockcoder    16 年前

    如果除了上述产品以外没有其他产品,您可以:

    SELECT 'Fruit' AS Product,
            Quantity
    FROM Table
    

    如果有其他产品,请添加一个WHERE子句

    WHERE Product IN ('Banana', 'Orange', 'Apple')
    
        5
  •  1
  •   Adam Ralph    16 年前

    您可以创建一个具有单列“product”列的临时表,并插入要替换的所有产品名称。

    然后针对目标表进行内部联接以进行更新。

    UPDATE
        Table
    SET Product = 'Fruit'
    FROM
        Table t1 INNER JOIN #Table t2 on t1.Product = t2.Product
    
        6
  •  0
  •   AlexCuse    16 年前

    从长远来看,创建“类别”表的建议将是您的最佳选择。

    有关示例,请查看此链接: Data belongs in your tables - not in your code

        7
  •  0
  •   sth    15 年前

    用于分隔SQL中文本的单引号:

    CASE WHEN ShiptoPlant IN (';','/',' ') Then '' ELSE ShipToPlant END