我正在尝试实现这种用例:当没有选择日期时,我想显示所有结果,但是当我选择日期时,我希望它进行过滤。
费: 获取的日期是表示变量中的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')})
) )
我需要有关服从语法的帮助
答案 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中处理日期会加剧这种仇恨。