根据日期范围从数据库中选择项目

时间:2009-11-03 16:02:59

标签: php mysql database

我有一个事件数据库,我需要能够显示“今天”发生的事件。事件的开始和结束日期格式为:Y-m-d h:i:s

我该怎么做?我尝试过以下方面的查询:

SELECT * 
FROM tbl_events 
WHERE start>='2009-11-03 16:00:00' 
and end<='2009-11-03 16:00:00'

无济于事。任何建议将不胜感激!

5 个答案:

答案 0 :(得分:2)

如果你只关心日期而不关心时间,这将适用于'今天'

select * from tbl_events where start >= curdate() and end < curdate() + 1

如果您想指定日期和时间,这将有效:

select * from tbl_events 
where start >= '2009-11-03 08:00:00' and end <= '2009-11-03 16:00:00'

答案 1 :(得分:0)

您想要选择当天发生的事件,而不是在此精确的第二天,对吗?因此,您的WHERE子句应该更像start = '2009-11-03'

答案 2 :(得分:0)

它现在可能起作用的原因,可能是那个结尾是一个受限制的词(或那种东西)

mysql.com begin-end info page

您可能希望将数据库字段名称更改为event_start和event_end,这有望解决问题,但我可能会说垃圾。

此外,如果它有帮助,您可以使用以下方法从范围中获取日期

SELECT * FROM tbl_event WHERE event_start BETWEEN (start_date) AND (end_date)

这只会查看一个字段,在本例中为event_start,但意味着如果您想获得开始日期在设定范围之间的事件范围,您可以。

答案 3 :(得分:0)

您是否尝试过投射日期时间字符串以输入“datetime”?

SELECT 
    * 
FROM 
    tbl_events 
WHERE 
        start >= CAST('2009-11-03 16:00:00' AS DATETIME)
    AND end   <= CAST('2009-11-03 16:00:00' AS DATETIME)

或者,就此而言,使用像NOW()这样的函数或像CURRENT_TIMECURRENT_TIMESTAMPCURRENT_DATE这样的关键字有什么问题?

对于Exmaple:

SELECT
    *
FROM
    tbl_events
WHERE
        start >= CURRENT_TIMESTAMP
    AND end   <= CURRENT_TIMESTAMP

编辑:Andy-Score可能与运算符和保留字之间存在某种关系,如:

SELECT
    *
FROM
    tbl_events
WHERE
        CURRENT_TIMESTAMP BETWEEN `start` AND `end`

答案 4 :(得分:0)

select count(*) as ce from estudantes where nascimento between DATE_SUB(CURDATE( ),INTERVAL 18 YEAR) and DATE_SUB(CURDATE( ),INTERVAL 25 YEAR)