sql - 使用表示变量在 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 语法的帮助
解决方案
在数据库内部,它不关心日期是“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 中处理日期会加剧这种仇恨。
推荐阅读
- sonarqube - SonarQube 质量门怪癖
- python - Python:如何更改两个字典的值
- java - Maven构建多模块项目成功,Eclipse显示错误
- python - 我已经安装并更新了枕头,但 pycharm 无法识别“PIL”,该怎么办?
- django - 如何使用图像 url 在 django 模板中包含图像?
- django - 使用 exec (shell) 运行 Docker 后以非 root 身份运行命令
- java - 当我尝试使用 Spring RestTemplate 检索对象时,为什么 Lombok 注释似乎不起作用?
- java - 转换列表
- batch-file - 批量回显 = 没有换行符
- xml - 如何在 XSLT 中的特定树层次结构中选择标签?