IBM COGNOS 在 CASE/IF 表达式中不兼容的数据类型



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

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

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

我已经尝试了我能想到的所有变体:有/没有强制转换,使用案例/时间/然后。我还创建了一个单独的数据项:

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

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)

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

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

任何帮助将不胜感激。

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

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

_day_of_week返回一个 int,所以我不知道你为什么要进行转换。 (_day_of_week([预计交货日期] = 1 ( 应该足够了,但那是以后的事了。

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

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

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

如果数据类型不同,那么您的方法是修改一个或另一个以匹配另一个。 例如,如果日期时间为 _add_days([预计交货日期],2(,则将其转换为日期。 或者使用current_timestamp但我不使用它,所以我不能谈论它。

如果使用 1=1 和 1<>1 代替 if 部分的内容,则可以控制表达式的流并验证错误是否来自 then 和 else 位。

对于另一个应用程序,这里有一些东西,但在概述测试技术方面是有效的。

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

相关内容

最新更新