子句包含格式 HH24:MI 之间的预言机



我的查询看起来像这样:

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 & 到:2012/07/18 00:10应该给我所有记录的时间戳在午夜和9M59S之间超过午夜,这就是我想要的。

between 子句接受两个区间边界。我向你推荐第二种选择

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

您可能会发现这篇文章很有趣。

日期转换会将值转换为包含所有日期元素的日期。 您尚未在字符串中指定秒,因此这些秒将变为 0。

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

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

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

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

您还可以根据建议更改语句,方法是递增#to#列并使用"<"而不是介于两者之间。

你可以做这样的事情:

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

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

如果要包含这些记录,则需要将"到"时间延长到 00:10:00 或将记录的时间戳TRUNC到最接近的分钟。

编辑:

如果你的从和到只精确到分钟,我会这样做:

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 */

并确保将绑定变量用于 from 和 to。 这是ColdFusion吗?如果是这样,请使用 cfqueryparam

相关内容

  • 没有找到相关文章

最新更新