您好,我想创建一个以日期作为列名的表。
我正在使用此代码向表中添加列:
DROP PROCEDURE IF EXISTS filldates;
DELIMITER |
CREATE PROCEDURE filldates(dateStart DATE, dateEnd DATE)
BEGIN
WHILE dateStart <= dateEnd DO
ALTER TABLE dates
ADD dateStart VARCHAR(30);
SET dateStart = date_add(dateStart, INTERVAL 1 DAY);
END WHILE;
END;
|
DELIMITER ;
CALL filldates('2017-01-01','2017-12-31');
但是它将错误 dateStart 显示为重复内容,因为它创建了一个列“dateStart”而不是日期。 如何将 dateStart 用作变量。
当我使用“INSERT INTO tablename (_date) VALUES (dateStart);”它没有显示任何错误,而是将日期插入数据库,而不是 ALTER TABLE 语句,而是作为“_date”列中的行。我希望将日期添加为列名。
如何将 dateStart 用作变量
最佳答案
简短的回答是您不能在 MySQL 中将变量用作数据库、表或列名。
你唯一能做的就是将sql语句连接成字符串并作为prepared statement执行。 .
SET @s=CONCAT('ALTER TABLE dates ADD COLUMN `',dateStart,'` VARCHAR(30)');
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
但是,向表中动态添加大量字段名称通常表示设计不当(除非您正在准备物化数据透视表以使用无法更改的数据进行报告)。
关于mysql - 我的 sql 在 ALTER TABLE ADD COLUMN 语句中使用了一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43849079/