将解码从Oracle转换为来自MS SQL Server的Case

时间:2017-02-02 23:13:59

标签: sql-server oracle decode

我有这条线,我正在努力将查询从Oracle转换为SQL Server 2012.以下行是:

DECODE(SUM(DECODE(a.canceldate, NULL, 1,0)), 1, NULL, To_Date(MAX(TO_CHAR(a.canceldate,'yyyymmdd')), 'yyyymmdd')) dCancelDate,

正如我所说的那样将其转换为:

case a.canceldate 
   (when sum(case a.canceldate when Null then 1 else 0 end)) 
   when 1 
       then 0  
       else convert(datetime,a.canceldate) 
end max(a.canceldate) as dCancelDate,

我会感谢一些助手,我的线路对于SQL Server 2012不正确。

1 个答案:

答案 0 :(得分:1)

case sum(case when a.canceldate is null then 1 else 0 end) when 1 then null else to_date( ... ) end dCancelDate, ... 公式相当于

when sum(...) when 1

我在翻译中看到的一个错误是你有when sum(...) = 1。您不能两种方式,sum(...) when 1to_date()。这可能是唯一的错误,我看起来并不太难。

你在trunc(max(a.canceldate))中所拥有的是可怕的;你是否将日期转换为字符串,然后采用最大的字母顺序,然后转换回日期?为什么?也许只是为了删除时间组件?使用ember init可以轻松完成这项工作。