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

时间:2009-02-02 15:50:22

标签: sql sql-server tsql

我正在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

有更简单的方法吗?

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

7 个答案:

答案 0 :(得分:20)

到目前为止,BradC有最好的答案,但如果你出于某种原因无法创建额外的表格,我想发布Kibbee答案的改编:

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

答案 1 :(得分:11)

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

然后做一个内部联接。

答案 2 :(得分:7)

Select
Case Product WHEN 'Banana' Then 'Fruit'
WHEN 'Apple' Then 'Fruit'
WHEN 'Orange' Then 'Fruit'
ELSE Product
END
FROM Table

答案 3 :(得分:1)

如果没有其他产品,您可以这样做:

SELECT 'Fruit' AS Product,
        Quantity
FROM Table

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

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

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

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

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