Abd*_*lla 6 mysql database alter-table mysql-variables
嗨,我想创建一个以日期作为列名的表。
我正在使用此代码将列添加到表中:
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');
Run Code Online (Sandbox Code Playgroud)
但它将错误 dateStart 显示为重复内容,因为它创建了一个列“dateStart”而不是日期。如何使用 dateStart 作为变量。
当我使用“INSERT INTO tablename (_date) VALUES (dateStart);”时 而不是 ALTER TABLE 语句,它不显示任何错误,它正在将日期插入数据库,但作为“_date”列中的行。我希望将日期添加为列名。
如何使用 dateStart 作为变量
Sha*_*dow 10
简短的回答是您不能将变量用作 MySQL 中的数据库、表或列名。
您唯一能做的就是将 sql 语句连接为字符串并作为准备好的语句执行。
SET @s=CONCAT('ALTER TABLE dates ADD COLUMN `',dateStart,'` VARCHAR(30)');
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
Run Code Online (Sandbox Code Playgroud)
但是,向表中大量动态添加字段名称通常表明设计不佳(除非您正在准备物化数据透视表以使用无法更改的数据进行报告)。
| 归档时间: |
|
| 查看次数: |
5679 次 |
| 最近记录: |