两个日期和两次之间的mySQL查询

时间:2014-08-01 09:02:41

标签: mysql sql

我想查询一个mySQL表,在两个日期和两个日期之间提取数据。我知道如何为单个"日期时间"列使用"之间的"但我的专栏是一个" date"专栏,一个"时间"柱。我在网上找到的所有解决方案都是针对单个日期时间列。

我的范围从" day1"在15:30到第1天+ 1天在15:14

到目前为止,我可以得到以下范围(有效):

SELECT time,
       close 
  FROM intraday_values 
 WHERE date="2005-03-01" 
   and time between "15:30" and "23:59"

但我显然需要合并2个日期和两次。我尝试过以下操作但收到错误:

SELECT time,
       close 
  FROM intraday_values 
       between date="2005-03-01" 
   and time="15:30" 
   and date="2005-03-02" 
   and time = "15:14"

有人可以帮我正确制定查询吗?非常感谢

2 个答案:

答案 0 :(得分:6)

不确定您的日期字段是否已编入索引。如果他们是其他人给出的“连续”例子可能表现不佳。

作为替代方案,您可以使用以下形式的查询:

select * 
  from foo 
 where (date > lower_date and date < upper_date) -- technically this clause isn't needed if they are a day apart
    or (date = lower_date and time >= lower_time)
    or (date = upper_date and time <= upper_time)

它不漂亮,但它可以工作,并允许mysql使用日期字段上的索引(如果存在)。

所以你的查询将是

SELECT time,
       close 
  FROM intraday_values 
 where (date > "2005-03-01" and date < "2005-03-02")
    or (date = "2005-03-01" and time >= "15:30")
    or (date = "2005-03-02" and time <= "15:14")

答案 1 :(得分:0)

使用concat将这两列合并,cast将其合并到datetime以获得最佳效果

SELECT 
time,close 
FROM 
intraday_values 
where  
cast(concat(date," ",time)  as datetime) 
between 
cast("2005-03-01 15:30") as datetime 
and cast("2005-03-02 15:14") as datetime