【问题标题】:SQL Decode Function (i only want to decode few of them)SQL 解码函数(我只想解码其中的几个)
【发布时间】:2026-02-22 15:10:01
【问题描述】:

故事就是这样,

SELECT STOCK_TABLE.Product_Name
From STOCK_TABLE 

在 Product_Name 内包含:

  • 衬衫
  • 牛仔裤
  • 上限
  • T 恤

所以我想改变Product_Name里面的item的包含,只要我知道我们可以使用decode来解决这个问题,但问题是我只想解码一些主题(牛仔裤和帽子),而不是全部。所以我用:

SELECT
  DECODE(STOCK_TABLE.Product_Name, 'Jeans', 'PJ1', 'Cap','PC1') as "Product Name"
From
  STOCK_TABLE

那么结果只有 PJ1(以前是牛仔裤)和 PC1(以前是帽子)。

问题是我希望它的其余部分(T 恤和衬衫)也出来,但使用其原始名称。
那我该怎么做呢?是否可以使用 decode 和一些我错过的函数添加,或者我们必须使用另一个 SQL 函数?

【问题讨论】:

  • 向我们展示输入和输出

标签: sql oracle decode decoding


【解决方案1】:

DECODE 是个不错的函数,但速度快不可读(当然是个人观点)

您可以完美地使用 CASE... WHEN(其作用相同,但当您有多个 if else 子句时通常更易于阅读)

case Product_Name
     when 'Jeans' then 'PJ1'
     when 'Cap' then 'PC1'
     else Product_Name
end as "Product Name"

【讨论】:

  • 马上试一试就行了,你知道的,它真的是一个很大很大很大的帮助。我很感激。非常感谢!
  • DECODE()not a nice function,完全同意CASE的说法。
  • 好吧,实际上我经常使用解码,因为在我的公司软件中,当我在查询编辑器中键入时,“解码”字样会变成另一种颜色,而当我尝试键入 WHEN 时,它不会换成黑色的任何颜色,所以我担心它不会起作用(我是一个新鲜的新手)。但是当很多人说我们可以像@RaphaëlAlthaus 说的那样用例时,我只是尝试了一下,它就可以了,所以现在问题解决了,源数据名称与其他数据相同。谢谢你们。无论如何如果你不介意回答,在什么情况下我们真的需要使用解码?
【解决方案2】:

我同意 case 表达式更容易阅读和维护,但是如果您遇到 DECODE,您应该明白它的结构无论如何都与 case 表达式非常相似

SELECT
DECODE(STOCK_TABLE.Product_Name
                               , 'Jeans', 'PJ1'
                               , 'Cap','PC1'
                               , Product_Name
      ) as "Product Name"
From
STOCK_TABLE

SELECT
DECODE(evaluate_this_expression
                               , value_to_match, value_to_output
                               , value_to_match, value_to_output
                               , else_value_to_output
      ) as alias_for_this
From
wherever

【讨论】:

    【解决方案3】:

    试试这个:

    SELECT CASE 
             WHEN Product_Name = 'Jeans' THEN 'PJ1'
             WHEN Product_Name = 'Cap' THEN 'PC1'
             ELSE Product_Name
           END as "Product Name" 
      FROM STOCK_TABLE
    

    【讨论】: