Sql Oracle日期间vs Microsoft日期间
当我从Microsoft query查询时得到正确的结果,但当我从SQLPLUS(Oracle)查询时得到错误的结果 这是微软的查询(结果显示从6月12日下午3点到6月13日上午12点是正确的)Sql Oracle日期间vs Microsoft日期间,sql,oracle,Sql,Oracle,当我从Microsoft query查询时得到正确的结果,但当我从SQLPLUS(Oracle)查询时得到错误的结果 这是微软的查询(结果显示从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>
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'})
选择
名称
CIM,
人数,
起始日期
从桌子上
其中(持续_标志=1)
和(计划_标志=0)
和(STARTDATETIME>{ts'2013-06-1204:00:00'}
和STARTDATETIME=截止日期('06/12/2013 16:00:00','MM/DD/YYYY HH24:MI:SS')
而To_Date(To_char(STARTDATETIME,'DD-MON-YYYY'))出现此问题的原因是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
其中STARTDATETIME>=截止日期('06/12/2013 16:00:00','MM/DD/YYYY HH24:MI:SS')
STARTDATETIME出现此问题的原因是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
其中STARTDATETIME>=截止日期('06/12/2013 16:00:00','MM/DD/YYYY HH24:MI:SS')
并且STARTDATETIME很抱歉,我删除了我的评论,因为我正在将其放入答案中。我也删除了我的评论,感谢您的帮助。请注意,第一个版本中有“04:00”,其中有“16:00”第二个。比较运算符也从
和
切换到=
和抱歉,我在将其放入答案时删除了我的评论。我也删除了我的评论,感谢您的帮助。请注意,第一个版本中有“04:00”,其中有“16:00”第二个。比较运算符也从
和
切换到=
和,非常感谢您的解释,但是我可能错了,如果在之间的之前有什么东西?它工作得很好,但是之后的之间不应该有,在中的之后。再次感谢。@mougli您可以在是方式。其中STARTDATETIME介于到日期('06/12/2013 16:00:00','MM/DD/YYYY HH24:MI:SS')和到日期('06/13/2013 12:00:00','MM/DD/YYYY HH24:MI:SS')之间
谢谢@Horrendous\u Space\u Kablooie我也会尝试一下。非常感谢您的解释,但是我可能错了,如果在之间的之前有什么东西呢?它工作正常,但是在之后的之间应该没有。再次谢谢。@Mowgli您可以用这种方式使用between。Where STARTDATETIME between To\u Date('06/12/2013 16:00:00'、'MM/DD/YYYY HH24:MI:SS')和截止日期('06/13/2013 12:00:00'、'MM/DD/YYYY HH24:MI:SS')
谢谢@Horrendous_Space_Kablooie我也会尝试一下。