SQL解码函数(我只想解码其中的几个)

时间:2014-08-14 08:51:23

标签: sql oracle decode decoding

所以这是故事,

SELECT STOCK_TABLE.Product_Name
From STOCK_TABLE 
Product_Name中的

包含:

  • 衬衫
  • 牛仔裤
  • T恤

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

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

然后结果只出现PJ1(以前是牛仔裤)和PC1(以前是帽子)。

问题是我希望其余部分(T恤和衬衫)也出现,但原来的名字。
那我该怎么办呢?是否可以使用解码和一些我想念的函数添加或者我们必须使用另一个SQL函数?

3 个答案:

答案 0 :(得分:2)

DECODE是一个很好的功能,但快速不可读(个人观点,当然)

您可以完美地使用CASE ... WHEN(当您有多个if else子句时,它会执行相同的操作,但通常更容易阅读)

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

答案 1 :(得分:2)

我同意case表达式更容易阅读和维护,但是如果遇到DECODE,你应该理解它的结构与case表达式非常相似

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

OR

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

答案 2 :(得分:0)

试试这个:

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