条款包含格式HH24:MI之间的oracle

时间:2012-08-11 14:37:26

标签: sql oracle format to-date

我的查询类似于:

select *
from mytable
where date_field between to_date(#from#, 'YYYY/MM/DD HH24:MI')
   and to_date(#to#, 'YYYY/MM/DD HH24:MI')

举个例子:

if from = 2012/07/18 00:00 and
   to   = 2012/07/18 00:09

这会包含时间戳为2012/07/18 00:09:012012/07/18 00:09:59的记录吗?

或者我应该将声明更改为:

select *
from mytable
where date_field >= to_date(#from#, 'YYYY/MM/DD HH24:MI')
   < to_date(#to#, 'YYYY/MM/DD HH24:MI')

此处替换自:2012/07/18 00:00&amp; to:2012/07/18 00:10应该给我所有记录,时间戳在午夜和午夜之间。 9月59日过了午夜,这就是我想要的。

4 个答案:

答案 0 :(得分:1)

between子句接受两者的间隔范围。 我建议给你第二个选择

select *
from mytable
where date_field >= to_date(#from#, 'YYYY/MM/DD HH24:MI')
   < to_date(#to#, 'YYYY/MM/DD HH24:MI')

您可能会发现this article很有趣。

答案 1 :(得分:0)

忽略DATE元素的日期部分,因为00:09:01和00:09:59都位于00:09:00的“到”时间之后,否,此查询将不包括那些记录。

如果您想要包含这些记录,则需要将“到”时间延长到00:10:00或将{1}}记录的时间戳延长到最近的分钟。

编辑:

如果您的起点和起点只是准确到分钟,我会这样做:

TRUNC

并确保对from和to使用bind变量。这是ColdFusion吗?如果是,请使用SELECT * FROM mytable WHERE date_field >= to_date(#from#, 'YYYY/MM/DD HH24:MI') AND date_field < to_date(#to#, 'YYYY/MM/DD HH24:MI') + 1/24/60/60 /* 1 minute */

答案 2 :(得分:0)

日期转换将把值转换为日期,其中包含所有日期元素。您没有在字符串中指定秒数,因此它们将变为0。

换句话说,不包括范围“:01” - “:59”。

由于您正在使用字符串并且字符串具有正确顺序的日期元素以进行比较,为什么不进行字符串比较:

where to_char(datefield, 'YYYY/MM/DD HH24:MI') between #from# and #to#

我认为这完全符合您的要求,而无需摆弄日期算术。

您也可以按照建议更改语句,方法是将#增加到#列并使用“&lt;”而不是之间。

答案 3 :(得分:0)

你可以这样做:

SELECT *
  FROM mytable
 WHERE date_field between to_date(#from#, 'YYYY/MM/DD HH24:MI')
   AND to_date(#to#||':59', 'YYYY/MM/DD HH24:MI:SS')