Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle日期间vs Microsoft日期间_Sql_Oracle - Fatal编程技术网

Sql Oracle日期间vs Microsoft日期间

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>

当我从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>{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我也会尝试一下。