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

44 mysql date between

我有一个mysql表,数据连接到日期.每行都有数据和日期,如下所示:

2009-06-25    75
2009-07-01    100
2009-07-02    120
Run Code Online (Sandbox Code Playgroud)

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

SELECT data FROM tbl WHERE date BETWEEN date1 AND date2

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

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

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

Jos*_*ger 38

您可以使用经常被称为"日历表"的概念.以下是如何在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';
Run Code Online (Sandbox Code Playgroud)

您可能想要创建表cal而不是子选择.

  • 网址完全一样,不是吗? (4认同)

小智 12

Select *  from  emp where joindate between date1 and date2;
Run Code Online (Sandbox Code Playgroud)

但是这个查询没有显示正确的数据.

例如

1-jan-2013 to 12-jan-2013.
Run Code Online (Sandbox Code Playgroud)

但它显示数据

1-jan-2013 to 11-jan-2013.
Run Code Online (Sandbox Code Playgroud)

  • 我使用它并且它是准确的,因为我的日期字段是DATETIME类型,因此输入值(对于一天内的数据),如下所示:`BETWEEN'2013-10-12 00:00:00'和'2013-10- 12 23:59:59'`工作!谢谢你,先生. (2认同)

小智 10

它很容易处理这种情况

你可以将BETWEEN CLAUSEdate_sub(now(),INTERVAL 30 DAY)和NOW()结合使用

SELECT
    sc_cust_design.design_id as id,
    sc_cust_design.main_image,
    FROM
    sc_cust_design
WHERE
    sc_cust_design.publish = 1 
    AND **`datein`BETWEEN date_sub( now( ) , INTERVAL 30 DAY ) AND NOW( )**
Run Code Online (Sandbox Code Playgroud)

快乐编码:)


fei*_*ief 4

你有一张包含所有日期的表格吗?如果没有,您可能需要考虑实施日历表并将数据连接到日历表中。