使用表示变量

时间:2018-09-10 15:11:27

标签: sql oracle date obiee

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

费: 获取的日期是表示变量中的YYYY-MM-DD HH24:MI:SS,但是查询中的日期格式为dd-mon-yy。因此,当我需要将表示变量的值转换为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')})
         ) ) 

我需要有关服从语法的帮助

1 个答案:

答案 0 :(得分:0)

在数据库内部,它不在乎日期是“ 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()变量周围放置一个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'),因为我的输入内容没有时间成分。 (我也会提醒您使用两位数的年份。)

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