在 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')
;
选择前 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());
谁能告诉我如何在 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')
;
选择前 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());