database - TO_TIMESTAMP 查询对于相同数据类型列 Oracle 的行为不同
问题描述
我有一个要查询的视图,该视图从 3 个不同的表中提取数据。奇怪的是,当我执行这个查询时:
select * from CPOB_MONITORING_DASHBOARD where FISCAL_MONTH_START_DT =
TO_TIMESTAMP('2016-01-01 00:00:00.000', 'YYYY-MM-DD HH24:MI:SS.FF')
它按预期工作..它返回所有带有日期的行2016-01-01
但是当我对另一列执行相同类型的查询时:
select * from CPOB_MONITORING_DASHBOARD where VOYAGE_STRT_DT =
TO_TIMESTAMP('2014-04-07 00:00:00.000', 'YYYY-MM-DD HH24:MI:SS.FF')
它不返回任何行.. 即使有许多日期的值为“2014-04-07”列来自不同的表并且类型为“日期”。我只能用TO_TIMESTAMP()
,不能TO_DATE()
。关于我需要在哪里解决这个问题的任何想法?
解决方案
看起来您的所有FISCAL_MONTH_START_DT
值都在午夜(从列名来看似乎是合理的),但您VOYAGE_STRT_DT
不是 - 它们在一天中还有其他时间,因此它们与您的查询不匹配,您的查询仅在寻找午夜。
select * from CPOB_MONITORING_DASHBOARD
where VOYAGE_STRT_DT >= TO_TIMESTAMP('2014-04-07 00:00:00.000', 'YYYY-MM-DD HH24:MI:SS.FF')
and VOYAGE_STRT_DT < TO_TIMESTAMP('2014-04-08 00:00:00.000', 'YYYY-MM-DD HH24:MI:SS.FF')
或更简单地说:
select * from CPOB_MONITORING_DASHBOARD
where VOYAGE_STRT_DT >= TIMESTAMP '2014-04-07 00:00:00'
and VOYAGE_STRT_DT < TIMESTAMP '2014-04-08 00:00:00'
或者更简单地说:
select * from CPOB_MONITORING_DASHBOARD
where VOYAGE_STRT_DT >= DATE '2014-04-07'
and VOYAGE_STRT_DT < DATE '2014-04-08'
虽然如果你因为某种原因不能使用to_date()
(!?)你可能也不能使用日期或时间戳文字。
当您以其他方式查询表时,您可能只会看到日期部分,这取决于您的客户端和 NLS 设置。要检查时间,您可以更改设置或明确格式化值:
select to_char(VOYAGE_STRT_DT, 'SYYYY-MM-DD HH24:MI:SS') as VOYAGE_STRT_DT
from CPOB_MONITORING_DASHBOARD
where VOYAGE_STRT_DT >= DATE '2014-04-07'
and VOYAGE_STRT_DT < DATE '2014-04-08'
推荐阅读
- docker - 从 Docker Compose 文件中的 Gitlab 注册表中提取图像
- wordpress - 我必须做什么才能在 xampp 中为我的 wordpress 实例创建一个本地域,以便为任何设备访问它(现有的 wordpress 项目)
- excel - 如何停止“复杂”宏(无法用现有主题解决此问题)
- c# - Tortoise svnversion.exe is invalid error in mvc
- node.js - URL 在浏览器中加载,但不在终端中(curl 或 Node.js)
- django - Django模型问题
- r - R - 如何一次循环遍历多行?
- node.js - 如何处理级联 observable
- sql-server - 如何检查是否已达到最后一条记录
- java - 在 Java 中使用 SAX 解析检测“内联字符串”单元格值的问题