2016-09-29 69 views
-2

嗨我想填充我的年表,从1881年到今年的年开始。在我的年表和身份证年份中,我只有两个领域。我如何用SQL查询来做到这一点。MySQL的一代填充表

像这样

id year  
1 1882 
2 1883 
3 1884 
4 1885 
.. 
id 2016 

谢谢

+0

请提供有关当前查询或你想什么更多的信息。 –

+0

对不起,我只是想插入年份表与ID,如(1,1881),(2,1882),(3,1883),(4,1884).......(id,2016 )我可以通过年份增量做到这一点,但我知道它可以在SQL查询 – sanu

+0

现在所有你需要的是1列(INT)主键 – Drew

回答

0

杠杆:

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; 

从回答上面:https://stackoverflow.com/a/9751493

现在为您表

create table years 
( year int primary key 
); 

insert years(year) select 1881+n 
from generator_256 
where n<150; 
-- 150 rows 

select min(year), max(year), count(*) from years; 
-- 1881 2030 150 

drop view if exists generator_256; 
drop view if exists generator_16; 

你现在有一个years台,年1881年至2030年

可选,

delete from years where year > year(now()); 
0

您可以创建一个存储过程来产生。在这种情况下,cal是您的日历表。这个想法是采取一个开始日期,然后循环日期和插入,直到你完成。

DELIMITER // 
CREATE PROCEDURE gen(IN start DATE) 
BEGIN 
    WHILE (SELECT start < NOW()) DO --- Check our date is before today. 
    INSERT INTO cal(`date`) VALUES (start); -- Insert it 
    SET start = ADDDATE(start, interval 1 year); -- add a year to it 
    END WHILE; 
END // 
DELIMITER ; 

然后,你可以把它叫做:

CALL gen(DATE('1898-01-01')); 
+0

@Strawberry:对不起,将其删除。我正在努力帮助,而我是新的。 – somnium