通过高级 SQL 过滤器进行 OBIEE11g 日期操作/比较

Posted

技术标签:

【中文标题】通过高级 SQL 过滤器进行 OBIEE11g 日期操作/比较【英文标题】:OBIEE11g date manipulation/comparison via the advanced SQL filter 【发布时间】:2015-09-14 17:12:58 【问题描述】:

我在使用高级 SQL 过滤器和日期比较进行分析时遇到了问题。

我有两个日期字段,Report DateValidated Date。我正在高级 SQL 过滤器中进行比较,这两个日期应该匹配。

在这种情况下,Report Date28-FEB-2012 12:00Validated Date28-FEB-2012 20:00。我的分析表明这两个日期是相等的。除了技术上,它们不是。

用 SQL 表示,我正在努力做到这一点:

TO_CHAR(REPORT_DATE, 'DD-MON-YYYY') = TO_CHAR(VALIDATED_DATE, 'DD-MON-YYYY')  

我已在高级 SQL 过滤器中尝试过该行,但它不起作用。我试过了:

EVALUATE(to_date(%1, %2), REPORT_NAME, 'DD-MON-YYYY')

...而 OBIEE 不接受它。

那么,OBIEE 11g 专家,我如何正确比较这些日期,以便清楚地发现它们不匹配?

【问题讨论】:

【参考方案1】:

你看过OBIEE生成的物理SQL吗?也许以毫秒为单位存在差异。您是否需要比较小时和分钟,或者与 CAST AS DATE 函数进行比较是否有效。 另外,您没有提到为什么Evaluate不起作用,您是否调整了OBIEE配置文件中的参数以使用该功能? 问候

【讨论】:

【参考方案2】:

您可以将两者都转换为时间戳并将它们与timestampdiff() 进行比较

TIMESTAMPDIFF(interval, timestamp1, timestamp2)

示例:

SELECT TIMESTAMPDIFF
( 
  SQL_TSI__SECOND, 
  CAST (report_date as TIMESTAMP),
  CAST ( validated_date as TIMESTAMP)
)
FROM table;

然后您可以将结果用作条件(例如,如果差异大于 0 秒,则为 X)

最详细的时间间隔是 SQL_TSI_SECOND,因此如果 @Ana GH 建议的毫秒数不同,这将不起作用

【讨论】:

以上是关于通过高级 SQL 过滤器进行 OBIEE11g 日期操作/比较的主要内容,如果未能解决你的问题,请参考以下文章

如何在 OBIEE 11g 分析中获取前 2 年的数据

OBIEE 11g:空白字符

OBIEE(11g) 移动 - 托管在单独的服务器上

如何在 OBIEE 11g 的提示中隐藏不相关的 NULL 值

obiee 11g 使用目录管理器提取分析的布局和视图

OBIEE 11g 中的换行符