2014-09-19 64 views
3

如何循環訪問值並將它們插入到數據庫中。具體是什麼我做的是這樣的:我有我想要看起來像這一年表:如何遍歷值並將它們插入數據庫中

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

可能重複http://stackoverflow.com/questions/10922064/how-do-i-get-a-list-of-numbers-in -mysql) – Bulat 2014-09-19 21:19:44

回答

1

這裏有幾個問題

  1. varchar不是convert有效的類型。 char
  2. 不要在周圍的名字引號括號
  3. 您需要結束後一個分號,而

代碼示例:

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// 

Example SQLFiddle

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 
的[我如何在MySQL號碼列表?(
+0

http://use-the-index-luke.com/blog/2011-07-30/mysql-row-generator#mysql_generator_code – Bulat 2014-09-19 21:14:44

相關問題