如何循环遍历值并将其插入数据库。具体来说,我正在做的是:我有一张桌子,我希望看起来像这样:
years
id name
1 2015*
2 2014
3 2013
etc etc
(2015年是在这里使用的,因为这个问题是在2014年提出的,我想在今年的第一年开展第一个领域 - 例如 - 如果你在2020年读到这个问题,第一个行应该是2021)。
id字段是auto_incremented,我在搜索了一遍后尝试了这个...
CREATE PROCEDURE `vehicle_years_data()`
BEGIN
DECLARE i INT DEFAULT YEAR(CURDATE()) + 1;
WHILE (i >= 1900) DO
INSERT INTO `vehicle_years` (`name`) VALUE(CONVERT(i, VARCHAR(255));
SET i = i - 1;
END WHILE
END$$
DELIMITER ;
CALL `vehicle_years_data()`;
DROP PROCEDURE `vehicle_years_data()`;
但这给了我:
You have an error in your SQL syntax; check the
BEGIN DECLARE i INT DEFAULT YEAR(CUR' at line 10
我知道这样做的静态方法就是
INSERT INTO `vehicle_years` (`name`) VALUES
(2015), (2014), (2013), ...
但这不仅更乏味,而且我无法通过当年加上其中一种动态开始。
非常感谢任何帮助。
答案 0 :(得分:1)
这里有一些问题
varchar
不是convert
的有效类型。 char
是代码示例:
create procedure `vehicle_years_data`()
begin
declare i int default year(curdate()) + 1;
while (i >= 1900) do
insert into `vehicle_years` (`name`) value (convert(i, char(255)));
set i = i - 1;
end while;
end//
答案 1 :(得分:1)
以下是基于程序的方法的替代方法:
CREATE OR REPLACE VIEW generator_16
AS SELECT 0 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 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL
SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL
SELECT 15;
CREATE OR REPLACE VIEW generator_256
AS SELECT ( ( hi.n << 4 ) | lo.n ) AS n
FROM generator_16 lo, generator_16 hi;
INSERT INTO `vehicle_years` (`name`)
select year(curdate()) - n from generator_256