有没有办法将列名更改为当前日期?我不需要它随着日期的变化动态更新 - 只是代码执行的日期。我尝试了以下代码,但语法错误
ALTER TABLE table_name CHANGE old_column_name CURDATE() DATE;
答案 0 :(得分:1)
在ALTER TABLE语句中,必须像SQL文本中的任何其他标识符一样提供新列名。
列的新名称不能作为函数返回提供,也不能作为绑定占位符提供。它必须作为标识符提供。
也就是说,您提交给数据库的SQL语句需要实际拼写出新的列名,作为语句的一部分:
ALTER TABLE table_name CHANGE old_column_name new_column_name DATE
因此,对您的问题的简短回答是否定的,它不能在单个SQL语句中完成。
显然,您可以在单独的步骤中执行操作,获取当前日期,以及创建包含要执行的SQL语句的字符串。您似乎还需要确定要更改的列的当前名称。
超出了被问到的问题......
我很难理解用例,这样的事情将是一个合适的解决方案。 问题是什么类型的功能试图解决?为什么需要更改列的名称。还需要更改引用该列的任何SQL语句。你可以存储这个" date"作为另一个表的一行中的值?
我唯一能想到为什么有人想要这样做的尝试是错误的尝试从SELECT *查询中在结果集中指定列名。
答案 1 :(得分:0)
虽然这可能是一个坏主意,但你打算做什么 - 可以使用prepared statement:
SET @stmt := CONCAT('ALTER TABLE table_name CHANGE old_column_name `', CURDATE(), '` DATE;');
PREPARE stmt from @stmt;
EXECUTE stmt;