SQL SELECT WHERE包含日期和时间

时间:2011-12-13 21:32:00

标签: mysql select

我有一个SELECT查询,我希望找到DATE和TIME介于2011-12-11 23:00:002011-12-12 23:00:00之间的所有行。我尝试使用WHERE但行为空

WHERE (date >= '2011-12-11' AND time > '23:00:00' )
AND   (date <  '2011-12-12' AND time < '23:00:00' )

请问有什么好的建议如何改变这个?

5 个答案:

答案 0 :(得分:5)

您可以使用:

SELECT * FROM table WHERE DATETIME(date) BETWEEN '2011-11-11 23:00:00' AND '2011-12-13 23:00:00'

或分开:

SELECT * FROM table WHERE DATETIME(date) > '2011-12-11 23:00:00' AND DATETIME(date) < '2011-12-13 23:00:00'


编辑:

我不确定我是否理解您要在此处实现的目标或您的数据库的布局,但假设日期和时间是单独的字段:

SELECT * FROM table WHERE DATETIME(concat(DATE(date),' ',TIME(time))) BETWEEN '2011-11-11 23:00:00' AND '2011-12-13 23:00:00'

我没有测试过,但这可能有用。

答案 1 :(得分:1)

是的,这几乎无法奏效。向我显示时间大于晚上11点的所有行,时间少于晚上11点。时间和日期是不同的领域?

你需要更聪明地构建查询:

WHERE  (date = '2011-12-11' AND  time > '23:00:00' )
  or  ( date = '2011-12-12' AND time < '23:00:00' )

对于24小时的窗口,你只需要有2个子句。如果您需要超过24小时的窗口,则需要三个子句,一个用于开始日期,一个用于结束日期,一个用于所有日期:

WHERE  (date = '2011-12-11' AND  time > '23:00:00' )
  or  ( date = '2011-12-13' AND time < '23:00:00' )
  or (date >='2011-12-12' and date  < '2011-12-13')

答案 2 :(得分:1)

哈,我有解决方案而无需重建dbase - 它正在工作:))

WHERE 
CONCAT(date,' ',time) >= '2011-12-11 23:00:00' 
AND   
CONCAT(date,' ',time) <  '2011-12-12 23:00:00'

也许对某人有帮助。

感谢所有帮助人们,brgs

答案 3 :(得分:0)

没有完整的查询就很难分辨。还假设日期列实际上是日期类型(?),您通常会执行类似TO_DATE('2012-12-11','yyyy-mm-dd')的操作来转换为比较中的日期类型。

答案 4 :(得分:0)

让我们确定某些事情

  • 搜索时,您需要摆脱单独datetime字段的想法
  • 您需要在表格中创建一个名为date_time(类型为DATETIME)的附加列,该列合并了这两个字段。
  • 您应该放弃单独的datetime字段,并且只有date_time
  • 然后,您可以在date_time
  • 上创建索引

这是执行该操作的命令

ALTER TABLE yourtable ADD INDEX date_time (date_time);

一旦你做了这些事情,那么你可以使用看起来像这样的WHERE子句创建一个查询:

WHERE date_time >= '2011-12-11 23:00:00'
AND   date_time <  '2011-12-12 23:00:00'

如果您无法合并日期和时间字段,您仍然可以创建索引

ALTER TABLE yourtable ADD INDEX date_time (date,time);

鉴于这种情况,您可以创建一个带有WHERE子句的查询,如下所示:

WHERE (date >= '2011-12-11' AND time >= '23:00:00')
AND   (date <= '2011-12-12' AND time <  '23:00:00')

任何一种情况的EXPLAIN计划都应该导致使用date_time索引快速执行查询。

试一试!!!