mysql - 我的 sql 在 ALTER TABLE ADD COLUMN 语句中使用了一个变量

标签 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');

但是它将错误 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/

相关文章:

php - mysql_fetch_array 中给出的字符串

PHP 表单似乎并不总是写入数据库

mysql - 插入到两个表

database - 如何预填充 sqlite 数据库?

MYSQL修改列数据类型脚本,检查当前列数据类型

php - MySQL 从 PHP 中重命名列

mysql - 使用一个参数在 Rails 中搜索通配符多列

node.js - 如何在 Node.js 中使用 bigquery API 获取 Google Cloud 的 800 万条记录?

mysql - 使用并集从多个表中选择计数相关行第 2 部分

sql - 无法将类型数字转换为 bool 值