在 mysql 数据库中添加一整月的日期

Add dates of one whole month in mysql database

谁能告诉我如何在 mysql 数据库中添加一整月的日期。现在我一次添加一个日期。

计划

  • build up decimal numbers with cross join on digits - all numbers can be expressed as :

    an10^n + .. a0*10^0

  • use date_add to add start of month data filtering where less than next month start

设置

create table example
(
  `date` date primary key not null
);

drop view if exists digits_v;
create view digits_v
as
select 0 as n
union all
select 1 union all select 2 union all select 3 union all 
select 4 union all select 5 union all select 6 union all
select 7 union all select 8 union all select 9
;

查询

insert into example ( `date` )
select date_add(date('2015-11-01'), interval a2.n * 100 + a1.n * 10 + a0.n day)
from digits_v a2
cross join digits_v a1
cross join digits_v a0
where date_add(date('2015-11-01'), interval a2.n * 100 + a1.n * 10 + a0.n day)
<     date('2015-12-01')
;

sqlfiddle


选择前 10 名可获得

select `date`
from example
order by `date`
limit 10
;

.

+----------------------------+
|            date            |
+----------------------------+
| November, 01 2015 00:00:00 |
| November, 02 2015 00:00:00 |
| November, 03 2015 00:00:00 |
| November, 04 2015 00:00:00 |
| November, 05 2015 00:00:00 |
| November, 06 2015 00:00:00 |
| November, 07 2015 00:00:00 |
| November, 08 2015 00:00:00 |
| November, 09 2015 00:00:00 |
| November, 10 2015 00:00:00 |
+----------------------------+

此查询生成给定月份的所有日期。

我在这个 post 中找到了这个。

当您将 NOW() 函数更改为您想要的任何日期时,它会生成该月的日期。您还可以将其与查询结合使用,或者将其与 INSERT [(col_name,...)] SELECT ... 语句一起使用,将所有日期插入到 table.

SELECT date_field
FROM
(
    SELECT
        MAKEDATE(YEAR(NOW()),1) +
        INTERVAL (MONTH(NOW())-1) MONTH +
        INTERVAL daynum DAY date_field
    FROM
    (
        SELECT t*10+u daynum
        FROM
            (SELECT 0 t UNION SELECT 1 UNION SELECT 2 UNION SELECT 3) A,
            (SELECT 0 u UNION SELECT 1 UNION SELECT 2 UNION SELECT 3
            UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7
            UNION SELECT 8 UNION SELECT 9) B
        ORDER BY daynum
    ) AA
) AAA
WHERE MONTH(date_field) = MONTH(NOW());