得到结果的日期之间的mysql

时间:2011-10-06 06:07:49

标签: php mysql sql date datetime

我在mytable

中有以下这些行
date_start
-----------
2011-09-20 13:00:00
2011-10-01 13:14:00
2011-10-09 13:16:00
2011-09-27 15:00:00
2011-09-30 14:04:00
2011-10-03 14:00:00


我有这个问题:

SELECT date_start
FROM `mytable`
WHERE date_start >= "2011-09-19"
AND date_start <= "2011-09-30"
LIMIT 0 , 30

这里的问题是它只输出:

2011-09-20 13:00:00
2011-09-27 15:00:00

我期待这个结果:

    2011-09-20 13:00:00
    2011-09-27 15:00:00
    2011-09-30 14:04:00

因为如果我们查看查询,它应该包含此结果:2011-09-30 14:04:00
我在这里做错了什么?

我也在mysql中使用BETWEEN,但输出仍然相同。

任何帮助都将受到极大的赞赏和奖励。

谢谢!

6 个答案:

答案 0 :(得分:2)

也考虑时间。你应该提到这个

SELECT date_start
FROM `mytable`
WHERE date_start >= "2011-09-19"
AND date_start <= "2011-09-30 23:59:59"
LIMIT 0 , 30

答案 1 :(得分:2)

假定被视为日期时间的日期为00:00:00小时:分钟:秒部分。因此,2011-09-30 14:04:00实际上是> = 2011-09-30。

要做你想做的事,试试:

SELECT date_start
FROM `mytable`
WHERE date(date_start) >= "2011-09-19"
AND date(date_start) <= "2011-09-30"
LIMIT 0 , 30

答案 2 :(得分:1)

2011-09-30将被解释为2011-09-30 00:00:00。尝试将范围的结尾设置为2011-09-30 23:59:59,你应该很好。

答案 3 :(得分:1)

就个人而言,我会将日期和时间元素拆分为两个单独的字段date_starttime_start,这样可以使您的查询在编码时正常工作,还可以让您更复杂和我有趣的日期相关活动,如我对以下问题的回答所解释。

Select all months within given date span, including the ones with 0 values

但是,如果您无法改变系统的工作方式,请将一天添加到您希望过滤的日期,然后执行<而不是<=比较也工作。

WHERE date_start >= "2011-09-19"
    AND date_start < "2011-10-01"

这比在过滤器中执行DATE(date_start)更快,因为当您在可以编制索引的字段上执行函数时,MySQL将无法使用任何索引。

希望有所帮助。

答案 4 :(得分:1)

date_start <= '2011-09-30'表示包含日期2011-09-30 00:00:002011-09-30 00:00:01以及之后的日期不包括在内。您可以使用<运算符加上常识日期算法来解决此问题:

SELECT date_start
FROM   mytable
WHERE  date_start >= '2011-09-19'
AND    date_start <  '2011-09-30' + INTERVAL 1 DAY
LIMIT  0, 30

答案 5 :(得分:0)

如果您在查询中使用 语句,则它将检索起点和终点之间的所有记录。

例如:

SELECT date_start
FROM `mytable`
WHERE date_start between '2011-09-19'and '2011-09-30:23:59:59'
LIMIT 0 , 30

根据您的要求试试。