【问题标题】:IBM COGNOS incompatible data types in CASE / IF expressionCASE / IF 表达式中的 IBM COGNOS 不兼容数据类型
【发布时间】:2020-09-29 07:36:06
【问题描述】:

我已经尝试了几个小时来获得我认为的在 IBM Cognos / Report Studio 10.0 中工作的简单 if-then-else 语句。 我只是想在查询中创建一个数据项,以确定日期是星期几,然后返回计算日期。

if (cast(_day_of_week([Expected Delivery Date],1), integer) = 1) 
then (_add_days([Expected Delivery Date],2))
else (current_date)

后端数据库是 Informix。我收到错误“相应的数据类型必须在 CASE 表达式或 DECODE 中兼容”

我已经尝试了所有我能想到的变体:有/无演员表,使用 case/when/then。我还创建了一个单独的数据项:

[计算星期几](数据项 - 计算正确)

cast(_day_of_week([Expected Delivery Date],1), integer)

[计算到期发货日期](数据项)

if ([Calc Day of Week] = 1) 
then (_add_days([Expected Delivery Date],2))
else (current_date)

即使在我的下一个数据项中使用该数据项,我也会收到相同的错误。

我只能认为它不理解我基于整数进行比较并尝试返回日期 - 但如果是这种情况,我如何创建数据项来执行这样的计算?

非常感谢任何帮助。

【问题讨论】:

  • 也许当 Cognos 将其转换为本机 Informix 时,它会搞砸?你能用 Informix 原生函数试试这个吗?

标签: informix sqldatatypes cognos-10


【解决方案1】:

错误是说 THEN 和 ELSE 部分的数据类型不同。第一步是确定数据类型。你没有提到你是否用你提到的计算做到了这一点。他们似乎专注于函数的 IF 部分。

基本技术称为分而治之。更优雅的措辞是,控制变量或隔离组件。

_day_of_week 返回一个 int,所以我不知道您为什么要进行强制转换。 (_day_of_week([Expected Delivery Date] = 1 ) 应该足够了,但那是以后的事了。

Take _add_days([预计交货日期],2)。将其放入表达式中,找出返回的数据类型。

将该数据类型与 current_date 进行比较。

Current_date 返回一个日期。预计交货日期的数据类型是什么?日期还是日期时间?

如果数据类型不同,那么您的方法是修改其中一个以匹配另一个。例如,如果是日期时间,则将 _add_days([Expected Delivery Date],2) 转换为 date。或者使用 current_timestamp 但我不使用它,所以我不能多说。

如果您使用 1=1 和 11 代替您的 if 部分,那么您可以控制表达式的流程并验证错误来自 then 和 else 位。

这是另一个应用程序的内容,但在概述测试技术时有效。

https://www.ibm.com/support/pages/corresponding-types-must-be-compatible-case-expression

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-09
    • 1970-01-01
    • 2015-07-22
    • 2023-03-10
    • 1970-01-01
    • 2015-05-01
    相关资源
    最近更新 更多