2017-01-02 70 views
0

我需要将下面的解码转换为SQL中的Case语句。尝试了多种方式,无法做到正确。解码为个案陈述

select 
DECODE(SIGN(A.column - to_date(( 
       DECODE('10/01/2011', 
        '%',to_char(A.column,'mm/dd/yyyy'),'10/01/2011')), 
        'mm/dd/yyyy')), 
     -1, 0, 
     A.Amount)) 
from A 
+0

请发布您尝试的以及您的代码问题。此外,这个查询是否工作? – Aleksej

回答

2
select case 
      when to_date(nullif(:dt,'%'),'mm/dd/yyyy') > A.column 
      then 0 
      else A.Amount 
     end 

from A   
+0

NULLIF使加一 - 学到了新东西! –

0

最好的办法来处理这样的代码是将其删除,找到原来的要求。

我怀疑它是如

1)如果“%”被传递回AMOUNT

2)如果日期字符串传递返回AMOUNT如果COLUMN大于参数大于或等于

3)返回0否则

这导致以下CASE语句

select A."COLUMN", 
case when :1 = '%' then A.Amount 
when A."COLUMN" >= to_date(:2,'mm/dd/yyyy') then A.Amount 
else 0 end as amount 
from A;