我有一个事件数据库,我需要能够显示“今天”发生的事件。事件的开始和结束日期格式为: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'
无济于事。任何建议将不胜感激!
答案 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)
它现在可能起作用的原因,可能是那个结尾是一个受限制的词(或那种东西)
您可能希望将数据库字段名称更改为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_TIME
,CURRENT_TIMESTAMP
,CURRENT_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)