【问题标题】:Mysql show only the messages in between datesMysql 仅显示日期之间的消息
【发布时间】:2013-09-28 20:07:48
【问题描述】:

我的mysql数据库表消息是这样的

id   message    start_date    end_date
1    message1   2013-09-29    2013-11-30
2    message2   2013-08-20    2013-09-30
3    message3   2013-06-20    2014-01-01
4    message4   2013-06-06    2013-09-20
5    message5   2013-10-25    2014-03-05

我想在start_date is equal to today and today is greater than start_date 时显示消息,并且以同样的方式显示消息 ``before end_date.一旦 end_date 已被越过,那么它不应该显示消息。为此,我已经这样做了

SELECT * FROM messages WHERE start_date >= CURDATE( )  and end_date >= CURDATE( );

但是这个显示所有开始日期还没有到来的消息。喜欢行5th(5 message5 2013-10-25 2014-03-05)。所以我只想要今天 start_date 和 start_date 之间的消息,它会显示到 end_date。那么有人可以告诉我该怎么做吗?任何帮助和建议都将非常可观。谢谢

【问题讨论】:

  • 给定您的示例数据,您是否只希望返回一行 (id=1)?
  • 不,我想要在该日期范围内多于一行..
  • 然后给出您示例中的数据,请显示您想要返回的行。您的评论说您想要start_date is equal to today 但您的代码显示“大于或等于今天”的行。换句话说,不清楚你想要什么。

标签: php mysql


【解决方案1】:

我认为这是你需要的:

编辑:

SELECT * FROM messages WHERE NOW() BETWEEN start_date AND end_date;

SELECT * FROM messages WHERE CURDATE() BETWEEN start_date AND end_date;

仅供参考,在您的原始查询中,您只需在比较 start_date 时更改运算符的方向:

SELECT * FROM messages WHERE start_date <= CURDATE() and end_date >= CURDATE();

【讨论】:

  • 请注意,您的第一个示例包括整个 start_date,但仅在 end_date 的午夜。这通常不是人们想要的。使用 CURDATE() 而不是 NOW() 将修复它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-08
  • 2012-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多