Database 对于相同的数据类型列,TO_时间戳查询的行为不同

Database 对于相同的数据类型列,TO_时间戳查询的行为不同,database,oracle,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 * fr

我有一个查询的视图,这个视图从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” 这些列来自不同的表,类型为“Date”。我只能使用TO_时间戳,不能使用TO_日期。你知道我需要去哪里解决这个问题吗

看起来您所有的财政月开始时间都是午夜,从列名上看这似乎是合理的,但您的航程开始时间却不是——它们有一天中的其他时间,因此它们与您的查询不匹配,而您的查询只查找午夜

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 >= 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')

太棒了!这应该行得通,我稍后会测试它,如果行得通,请选择您的响应!你是对的!我将NLS设置也更改为显示时间,财政月开始时间设置为午夜,而航程时间设置为9:00!太棒了!这应该行得通,我稍后会测试它,如果行得通,请选择您的响应!你是对的!我将NLS设置也更改为显示时间,财政月开始时间设置为午夜,而航程时间设置为9:00!我只能使用时间戳而不能使用日期?认真地为什么?我以前没听过这个。@mathguy我们每天都听到新的东西,不是吗?这是因为此查询是由C中的动态Linq生成的,无法操作生成的IQueryable以使用to_DATE我只能使用to_时间戳而不能使用to_DATE?认真地为什么?我以前没听过这个。@mathguy我们每天都听到新的东西,不是吗?这是因为此查询是由C中的动态Linq生成的,无法操作生成的IQueryable以使用to_DATE
select * from CPOB_MONITORING_DASHBOARD
where VOYAGE_STRT_DT >= DATE '2014-04-07'
and VOYAGE_STRT_DT < DATE '2014-04-08'
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'