2012-07-07 152 views
0

您好我有DB2选择CASE语句:SQL CASE语句返回错误

case when actualfinish is not null then dec ((timestampdiff(
    4, 
    char(actualfinish - reportdate))/60.00),10,2) 
else 'not' 
end 

它返回我的错误。 如果我删除ELSE部分没有错误并且计算完成。

case when actualfinish is not null then dec ((timestampdiff(
     4, 
     char(actualfinish - reportdate))/60.00),10,2) 
end 

如果我改变的部分然后像

​​

也没有错误。

但是对于我的完整SQL查询 - 找不到错误。这里 感谢

+0

什么数据类型,则DEC()函数的返回? – Chandu 2012-07-07 17:28:28

回答

3

问题是dec功能CASE语句的其他部分返回十进制数据类型你是返回一个VARCHAR,因此这个问题。

在你的第二个版本 case when actualfinish is not null then 'Yes' else 'not' end

无论是whenelse因而是返回相同的数据类型的查询运行正常。

更改您的其他发送一个十进制等效值,它应该执行良好。

更新:

使用此版本,如果你可以返回小数作为一个字符串:

CASE 
    WHEN actualfinish IS NOT NULL THEN CHAR(DEC((TIMESTAMPDIFF(4, CHAR(actualfinish - reportdate))/60.00),10,2)) 
    ELSE 'not' 
END 
+0

昌都感谢,但如何解决这个呢?我的其他部分必须返回'不',以表明actualfinish为空,然后我的firts部分必须返回浮点值以显示差值的计算值。我真的必须有这种类型 - 浮动和字符串。那么如何解决呢?谢谢 – Dejan 2012-07-07 17:43:33

+0

正如我所说的返回相同的数据类型我WHEN和ELSE是它的Decimal或VARCHAR凡是适合的要求 – Chandu 2012-07-07 17:45:48

+0

我可以以某种方式欺骗SQL查询并将THEN部分中的这个十进制值转换为字符串值?那将是什么正确的表达?谢谢 – Dejan 2012-07-07 17:48:33