我有以下问题:
在mysql中,我有一个包含两个日期列start_date和end_date的表。日期格式为yyyy-mm-dd。我想要做的是从特定日期的所有行获取所有数据,让我们说'2012-03-05'匹配其中一个日期列,或介于两者之间。
如何创建一个获得所需数据的好的SQL查询?我已经检查了之间的声明,但我真的不知道这是否是最佳方式。我想这通常是一个简单的任务,但我无法想出一个好的查询。
感谢。
答案 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;