我有一个要查询的视图,该视图从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()
。关于需要在哪里解决的任何想法?
答案 0 :(得分:3)
您的所有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'