MySQL在一个范围内的表中插入日期记录

时间:2017-07-23 14:16:09

标签: mysql date

我想知道是否有一种方法可以通过严格的SQL查询来完成这项工作。

假设我想根据一系列日期local trainLoader = BatchLoader.new() 将一系列记录放入MySQL表中,但日期中没有相应的“表”,如下所示:

INSERT

显然,只有INSERT INTO scheduleable( available_date, status ) SELECT DATE, 'open' FROM DATES BETWEEN '2017-01-15' AND '2017-05-01' 不是真正的表格。

这样的事情可能吗?显而易见的好处是能够插入具有正确日期值的记录,如2月和4月。

1 个答案:

答案 0 :(得分:0)

我使用了here提供的解决方案 - 但是,我选择将查询转换为VIEW - 这远远优于实际创建日期的物理表!

然而,我告诉MySQL你can't have a subquery in the 'FROM' clause,所以我的解决方案并不完全优雅,但也许是" 10列表"可能对其他应用程序有用。这是我的解决方案:

首先创建此视图:

CREATE OR REPLACE VIEW `_v_list_10` AS 
SELECT 0 AS `a` union all select 1 AS `1` union all select 2 AS `2` union all select 3 AS `3` union all select 4 AS `4` 
union all select 5 AS `5` union all select 6 AS `6` union all select 7 AS `7` union all select 8 AS `8` union all select 9 AS `9`;

然后创建此视图:

CREATE OR REPLACE VIEW _v_dates_1000 AS 
SELECT CURDATE() + INTERVAL 365 DAY - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY AS Date
FROM _v_list_10 AS a
CROSS JOIN _v_list_10 AS b
CROSS JOIN _v_list_10 AS c

请注意,我的日期范围将在未来365天开始,并从那里返回一千。您可以轻松地将其构建为10,000或100,000或等等。

由于我的信息数据库仅包含州和国家名称,美国县等近乎常数的信息数据库,因此这是该数据库的一个很好的候选者。并且,它没有空间。希望这可以帮助其他人!