两个日期列,一个日期。我怎样才能获得数据?

时间:2012-02-29 21:48:23

标签: mysql sql date

我有以下问题:

在mysql中,我有一个包含两个日期列start_date和end_date的表。日期格式为yyyy-mm-dd。我想要做的是从特定日期的所有行获取所有数据,让我们说'2012-03-05'匹配其中一个日期列,或介于两者之间。

如何创建一个获得所需数据的好的SQL查询?我已经检查了之间的声明,但我真的不知道这是否是最佳方式。我想这通常是一个简单的任务,但我无法想出一个好的查询。

感谢。

4 个答案:

答案 0 :(得分:4)

SELECT * FROM table WHERE start_date <= '2012-02-29' AND end_date >= '2012-02-29';

应该这样做。

答案 1 :(得分:3)

这是使用日期范围构建表格的一种非常常见的方法,尤其是在temporal database设计中。它允许您非常有效地执行基于范围的查询,假设两列上的索引都存在。您可以像这样查询数据:

select *
from mytable t
where t.start_date <= @desired_date and t.endDate > @desired_date

@desired_date是您要查询的日期,例如'2012-03-05'。

注意一边是<=,另一边是>,没有=。这样做是为了确保从 - 到范围定义非重叠间隔。

答案 2 :(得分:2)

不确定,尝试这样的事情:

SELECT
    *
FROM
    mytable
WHERE
    '2012-03-05' BETWEEN start_date AND end_date

答案 3 :(得分:2)

SELECT * FROM mytable
WHERE '2012-03-05' BETWEEN start_date AND end_date;