首页 > 解决方案 > 使用表示变量在 OBIEE 中转换直接 sql 查询的日期

问题描述

我正在尝试实现这个用例:当没有选择日期时,我想显示所有结果,但是当我选择日期时,我希望它进行过滤。

仅供参考:在表示变量中选择的日期是 YYYY-MM-DD HH24:MI:SS,但我的查询中的日期格式是 dd-mon-yy。因此,当我需要将 presntation 变量的值转换为 dd-mon-yy 时。OBIEE 不喜欢我玩弄这些值,而且 BI 服务器不允许我查看错误消息。我无权更改服务器级别的格式,所以我唯一的选择是使用公式

我是演示变量的新手。我还需要你记住,如果提示中没有选择日期,我希望返回所有值

代码:

and 
   ( (       main_query.schd_compare >= (@{pv_task_sch_st_date}['@']{NVL(main_query.schd_compare,'None')})

        )
       AND (
            main_query.schd_compare  <= (@{pv_task_sch_end_date}['@']{NVL(main_query.schd_compare,'None')})
         ) ) 

我需要有关 obiee 语法的帮助

标签: sqloracledateobiee

解决方案


在数据库内部,它不关心日期是“DD Mon YY”还是“YYYY-MM-DD HH24:MI:SS”。这些只是格式化,该日期的实际位值将是相同的。因此,如果两个“日期”实际上都是一种date数据类型,那么您可以使用如下内容:

....
AND ( 
   (       
     main_query.schd_compare >= NVL(pv_task_sch_st_date,main_query.schd_compare)
   )
   AND 
   (
     main_query.schd_compare  <= NVL(pv_task_sch_end_date,main_query.schd_compare)
   )
) 

那是如果您在未选择时作为值pv_task_sch_???_date传递。NULL在这样的比较中,Oracle 似乎确实对待空字符串和相同,但是如果您养成依赖和相同NULL的习惯,您可能很难调试。NULL''

至于您的查询,我的猜测是您的pv_task...值实际上是作为某种字符串传递给您的查询的。如果是这种情况,那么您需要在变量TO_DATE()周围加上 a 。pv_task...

看看https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=2066b2005a22769e785815f6b03750a1。我通过几个例子来说明如何处理你的约会。

我之前确实说过,数据库并不关心您的日期格式。无论格式如何,它的存储方式都是一样的。但是当您使用TO_DATE()或其他类似功能时,Oracle 希望您指定正确的数据掩码。如果您将“01 Jan 99”发送到TO_DATE(),Oracle 需要知道如何解释该值。所以你告诉它字符串是“DD Mon YY”。你不能这样做TO_DATE('2018-09-10','YYYY-MM-DD HH24:MI:SS'),因为我的输入没有时间组件。(我也会谨慎使用 2 位数的年份。)

顺便说一句,我讨厌约会。在 Oracle 中处理日期会加剧这种仇恨。


推荐阅读