对于相同的数据类型列Oracle

时间:2018-07-12 18:49:35

标签: database 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()。关于需要在哪里解决的任何想法?

1 个答案:

答案 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'