我在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
,但输出仍然相同。
任何帮助都将受到极大的赞赏和奖励。
谢谢!
答案 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_start
和time_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:00
但2011-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
根据您的要求试试。