我有以下问题:两个日期列,一个日期。我如何获取数据?
在mysql中,我有一个表,其中包含两个日期列start_date和end_date。日期格式为yyyy-mm-dd。我想要做的是从特定日期的所有行中获取所有数据,可以说'2012-03-05'列出了这些日期列之一或之间的内容。
如何创建一个很好的获取所需数据的sql查询?我已经检查了两者之间的关系,但我不确定这是否是最好的选择。我想这通常是一个简单的任务,但我无法找出一个好的查询。
谢谢。
我有以下问题:两个日期列,一个日期。我如何获取数据?
在mysql中,我有一个表,其中包含两个日期列start_date和end_date。日期格式为yyyy-mm-dd。我想要做的是从特定日期的所有行中获取所有数据,可以说'2012-03-05'列出了这些日期列之一或之间的内容。
如何创建一个很好的获取所需数据的sql查询?我已经检查了两者之间的关系,但我不确定这是否是最好的选择。我想这通常是一个简单的任务,但我无法找出一个好的查询。
谢谢。
这是一种使用日期范围来构建表格的非常常见的方法,特别是在temporal database设计中。它可以让你非常有效地执行基于范围的查询,假设两列的索引都存在。您查询的数据是这样的:
select *
from mytable t
where t.start_date <= @desired_date and t.endDate > @desired_date
@desired_date
是您想查询,例如日期'2012-03-05'。
注意<=
在另一面,>
在另一面,没有=
。这样做是为了确保起始范围定义非重叠间隔。
不知道,尝试是这样的:
SELECT
*
FROM
mytable
WHERE
'2012-03-05' BETWEEN start_date AND end_date
我想我可以做类似SELECT * FROM测试,其中起始日期<= '2012-03-05' 日期和结束日期> =“2012- 03-05' 。但是有更好的方法吗? – Ms01 2012-02-29 21:53:29
如果与'start_date' /'end_date'的间隔结束,通常只有其中一个包含*; *另一个是*独占*。这样做是为了确保多个记录不匹配具有相同日期的查询。哪一个是包容性的,哪一个不依赖于你的数据库设计。 – dasblinkenlight 2012-02-29 22:01:38