【问题标题】:SQL CASE statement returns errorSQL CASE 语句返回错误
【发布时间】:2012-07-07 19:03:11
【问题描述】:

您好,我在 DB2 中有 select 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

如果我将 THEN 部分更改为类似

  case when actualfinish is not null then 'Yes'
    else 'not'
     end

也没有错误。

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

【问题讨论】:

  • dec() 函数返回什么数据类型?

标签: sql case


【解决方案1】:

这里的问题是 dec 函数在您返回 VARCHAR 的 CASE 语句的 else 部分中返回十进制数据类型,因此出现了问题。

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

whenelse 都返回相同的数据类型,因此查询运行良好。

更改您的 else 以发送一个十进制等效值,它应该可以正常执行。

更新:

如果可以将十进制作为字符串返回,请使用此版本:

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

【讨论】:

  • Chandu 谢谢,但是怎么解决呢?我的 else 部分必须返回“not”以指示实际完成为空,然后我的第一个部分必须返回浮点值以显示计算出的差异值。我真的必须同时拥有这种类型 - 浮点数和字符串。那怎么解决呢?谢谢
  • 正如我提到的返回相同的数据类型 i WHEN 和 ELSE 无论是 Decimal 还是 VARCHAR 都适合要求
  • 我能以某种方式欺骗 SQL 查询并将 THEN 部分中的这个十进制值转换为字符串值吗?正确的表达方式是什么?谢谢
  • 我不是 Db2 专家。看起来您可以使用 CHAR 函数将小数转换为字符串。例如:CASE WHEN actualfinish IS NOT NULL THEN CHAR(DEC((TIMESTAMPDIFF(4, CHAR(actualfinish - reportdate))/60.00),10,2)) ELSE 'not' END
猜你喜欢
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-28
相关资源
最近更新 更多