当我从Microsoft Query查询时,我得到了正确的结果但是当我从SQLPLUS(Oracle)查询时,我得到的结果不正确。
以下是Microsoft Query(结果显示从6月12日下午3点到6月13日上午12点正确。
SELECT
NAME,
CIM,
NUM_of_People,
STARTDATETIME
From Table
WHERE (SUSTAINED_FLAG=1)
AND (PLANNED_FLAG=0)
AND (STARTDATETIME>{ts '2013-06-12 04:00:00'}
And STARTDATETIME<{ts '2013-06-13 12:00:00'})
在Oracle中我使用这个条款给我错误的结果。
它显示了
仅在6月13日12:AM到12 PM之后查询日期结果。
SELECT
NAME,
CIM,
NUM_of_People,
TO_CHAR(STARTDATETIME,'MM/DD/YYYY HH:MI:SS') As STARTDATETIME
FROM OBVWH.
where BETWEEN To_Date(to_char(STARTDATETIME, 'DD-MON-YYYY')) >= To_Date('06/12/2013 16:00:00','MM/DD/YYYY HH24:MI:SS')
and To_Date(to_char(STARTDATETIME, 'DD-MON-YYYY')) <= To_Date('06/13/2013 12:00:00','MM/DD/YYYY HH24:MI:SS')
and sustained_flag = 1 and planned_flag = 0 ORDER BY STARTDATETIME ASC
答案 0 :(得分:4)
您遇到此问题的原因是因为where子句
To_Date(to_char(STARTDATETIME, 'DD-MON-YYYY'))
正在做的是从您的约会中删除时间元素,以便它们全部在午夜有效。
就是一个简单的例子SELECT CASE
WHEN to_date(to_char(SYSDATE, 'DD-MON-YYYY')) = SYSDATE THEN
'yes'
ELSE
'no'
END
FROM dual
正如您所看到的,在更改两次格式后,sysdate不再等于它自己。
由于该列是一个日期,您根本不需要对其进行任何格式化,只需将您的where子句更改为
where STARTDATETIME >= To_Date('06/12/2013 16:00:00','MM/DD/YYYY HH24:MI:SS')
and STARTDATETIME <= To_Date('06/13/2013 12:00:00','MM/DD/YYYY HH24:MI:SS')
and sustained_flag = 1 and planned_flag = 0 ORDER BY STARTDATETIME ASC