Mysql:选择两个日期之间的所有数据

标签 mysql date between

我有一个 mysql 表,其中包含与日期相关的数据。每行都有数据和日期,如下所示:

2009-06-25    75
2009-07-01    100
2009-07-02    120

我有一个 mysql 查询,可以选择两个日期之间的所有数据。这是查询:

SELECT data FROM tbl WHERE date BETWEEN date1 AND date2

我的问题是,即使一天没有数据,我也需要获取 date1 和 date2 之间的行。

所以我的查询会错过 2009-06-25 和 2009-07-01 之间的空日期。

我可以以某种方式将这些日期添加为只有 0 的数据吗?

最佳答案

您可以使用经常被称为“日历表”的概念。 Here是关于如何在 MySql 中创建日历表的一个很好的指南:

-- create some infrastructure
CREATE TABLE ints (i INTEGER);
INSERT INTO ints VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);

-- only works for 100 days, add more ints joins for more
SELECT cal.date, tbl.data
FROM (
    SELECT '2009-06-25' + INTERVAL a.i * 10 + b.i DAY as date
    FROM ints a JOIN ints b
    ORDER BY a.i * 10 + b.i
) cal LEFT JOIN tbl ON cal.date = tbl.date
WHERE cal.date BETWEEN '2009-06-25' AND '2009-07-01';

您可能希望创建表 cal 而不是子选择。

关于Mysql:选择两个日期之间的所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1080207/

相关文章:

mysql - 如果 WHERE 子句中没有值,多列索引中的列顺序是否重要

Jquery dd/MM/yyyy 日期格式验证

javascript - 从 GMT 时间格式中删除时间

mysql - SQL : count days between two dates

MySQL UPDATE 随机数在 1-3 之间

mysql - 按最大数降序排列,但空值排名更高

php - 尝试将其插入数据库时​​无法识别我的用户 ID session cookie

mysql - 数据模型,将产品属性保存在单独的表中?

php - 将日期从表单插入到mysql

sql - 从日期范围生成天数