如何在 MySQL 中编写从现在到今天午夜之间的查询?
Posted
技术标签:
【中文标题】如何在 MySQL 中编写从现在到今天午夜之间的查询?【英文标题】:How to write query with time between now and midnight of today in MySQL? 【发布时间】:2012-11-24 04:44:53 【问题描述】:我有如下查询
SELECT * FROM programs where startTime between now() and now() + INTERVAL 1 DAY;
是否可以在 mysql 中编写从现在到今天午夜之间的查询?
类似下面的东西
SELECT * FROM programs where startTime between now() and now() + midnight 12;
【问题讨论】:
【参考方案1】:SELECT *
FROM programs
WHERE DATE(startTime) = CURRENT_DATE AND startTime > CURRENT_TIMESTAMP
【讨论】:
【参考方案2】:我建议您始终使用 clopen(封闭-开放)间隔进行日期和时间比较。 BETWEEN
表示封闭间隔(从两侧)。 @Aaron Bertrand's 博客文章中有一个很好的解释:What do BETWEEN and the devil have in common?。这是编写查询的一种方法:
SELECT *
FROM programs
WHERE startTime >= NOW()
AND startTime < CURRENT_DATE() + INTERVAL 1 DAY ;
【讨论】:
【参考方案3】:您可以尝试以下方法:不过可能会很长。
示例表:
ID STIME ETIME
1 December, 05 2012 05:23:00+0000 December, 05 2012 07:30:00+0000
2 December, 05 2012 10:23:00+0000 December, 05 2012 12:30:00+0000
3 December, 06 2012 22:45:00+0000 December, 07 2012 01:00:00+0000
4 December, 06 2012 22:23:00+0000 December, 06 2012 23:55:00+0000
5 December, 06 2012 20:23:00+0000 December, 06 2012 22:55:00+0000
6 December, 07 2012 10:23:00+0000 December, 07 2012 12:30:00+0000
查询
SELECT *,curtime() FROM prog
WHERE date(stime) = date(now())
AND date(etime) = date(now())
AND time_to_sec(SUBTIME(etime,'24:00:00')) >= 0
;
结果
ID STIME ETIME
4 December, 06 2012 22:23:00+0000 December, 06 2012 23:55:00+0000
5 December, 06 2012 20:23:00+0000 December, 06 2012 22:55:00+0000
【讨论】:
【参考方案4】:试试这个 ::
SELECT * FROM programs where startTime between now() and DATE_SUB(CURDATE(), INTERVAL 1 DAY)
【讨论】:
语法不正确,between
需要多一个参数【参考方案5】:
SELECT * FROM programs where startTime between now() and CURRENT_DATE() + INTERVAL 1 DAY;
当前日期返回一天的开始,然后我们添加 1 天到结束。
【讨论】:
这将包括明天的00:00:00
;目前还不清楚这是否可取。
是的,您可能想使用where startTime >= now() and startTime < CURRENT_DATE() + INTERVAL 1 DAY
以上是关于如何在 MySQL 中编写从现在到今天午夜之间的查询?的主要内容,如果未能解决你的问题,请参考以下文章