我正在编写一系列MySQL查询来操作表中的数据。我有一个表,它是由我无法控制的系统自动生成的。当我得到它时,这个表有几个列:
ID、名称、日期、标题和包含十进制值的列。
每次表由外部系统自动生成时,它都会用当前日期命名包含十进制值的值。目前,该列被称为"16_Jul_17",因为这是系统运行的最后一天。
我需要一种可靠的方法来查询表(并重命名该列),而不需要知道十进制值列的当前名称。是否有办法执行下列选项之一:
发布于 2017-07-19 19:52:10
我找到了一个适合我的解决办法。我不知道它在一般情况下有多适用,但对于我的申请来说,它就像一种魅力。
由于我从外部源了解表中列的顺序,所以我只使用UNION,如下所示:
Select 'Id', 'Name', 'Date', 'Title', 0.00 AS 'Value' LIMIT 0
UNION ALL
Select * from original_table
除了显式别名以外,MySQL使用这些值作为列名。请注意,LIMIT 0
是必需的,这样就没有虚拟行。
发布于 2017-07-18 19:18:50
可以用ALTER TABLE CHANGE COLUMN
语句重命名列,但必须首先知道列的名称。
您必须使用DESCRIBE <tablename>
或query INFORMATION_SCHEMA.COLUMNS
来获取表中列的名称和数据类型。
一旦获得了列名,就可以为该列的ALTER TABLE
语句设置字符串格式。您应该使用应用程序代码来完成这个任务。
发布于 2017-07-18 19:26:21
如果您知道定义了列的位置N,则可以使用查询恢复N列名称:
select COLUMN_NAME
from INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'TBL_NAME'
AND ORDINAL_POSITION = POSITION_YOUR_COLUMN
之后,可以手动(通过ALTER )或脚本(在shell中生成ALTER、python、.)来具体更改该列。
https://stackoverflow.com/questions/45175249
复制相似问题