【问题标题】:Replace Multiple Strings in SQL Query替换 SQL 查询中的多个字符串
【发布时间】:2009-02-02 15:50:21
【问题描述】:

我正在 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 子句中使用嵌套的 REPLACE。

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

有没有更简单的方法?

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

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

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

    SELECT
        CASE WHEN Product IN ('Banana', 'Apple', 'Orange') Then 'Fruit'
        ELSE Product END 
    FROM [Table]
    

    【讨论】:

    • 这将最适合我的目的,因为我从中提取的数据库是一个存档。否则添加一个类别列将是要走的路。谢谢!
    • 他说的是添加一个小查找表,这很容易做到,即使对于存档数据库也是如此。
    【解决方案2】:

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

    然后做一个内部连接。

    【讨论】:

    • 这将是一个很好的解决方案,除了我从只读存档中提取。
    【解决方案3】:
    Select
    Case Product WHEN 'Banana' Then 'Fruit'
    WHEN 'Apple' Then 'Fruit'
    WHEN 'Orange' Then 'Fruit'
    ELSE Product
    END
    FROM Table
    

    【讨论】:

      【解决方案4】:

      如果除了提到的产品之外没有其他产品,您可以这样做:

      SELECT 'Fruit' AS Product,
              Quantity
      FROM Table
      

      如果有其他产品,只需添加 WHERE 子句

      WHERE Product IN ('Banana', 'Orange', 'Apple')
      

      【讨论】:

        【解决方案5】:

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

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

        UPDATE
            Table
        SET Product = 'Fruit'
        FROM
            Table t1 INNER JOIN #Table t2 on t1.Product = t2.Product
        

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            【解决方案7】:

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

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

            【讨论】:

              猜你喜欢
              • 2014-07-03
              • 2023-02-23
              • 2020-06-09
              • 2011-10-05
              • 2017-01-06
              • 2016-09-01
              • 2019-04-16
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多