SQL为类似的表创建新列名称

问题描述:

我有一个名为Person的表,其中每列都有字母'Person'作为前缀;即PersonLastName,PersonAddress1,PersonCity等。我希望创建一个与Person具有相同结构但在列名称上具有不同前缀的新表,例如XxxLastName,XxxAddress1,XxxCity。如果我使用SQL为类似的表创建新列名称

Create Table Like Person 

我会得到正确的结构,但从Person中获得原始列名称。当然,我可以重新命名所有列,但这是一项乏味的工作。有没有办法像Person一样创建一个表格,并根据某些规则重命名列?

+2

请告诉我为什么你需要有一个前缀? –

+2

我认为这个表格足够前缀:'Person.FirstName'与'Person.PersonFirstName'是平等的(如果不是更有意义的话) –

+0

Ed,Rob,我有很多原因使用我自己的前缀。其中之一是我有一个广泛的元数据类型的表,它不被MySql捕获并且我自己维护。我有时需要根据前缀进行查找。另一个是在我调试时在我的代码中轻松定位列名。第三是为了我自己的内在清晰。数据库非常复杂,我不想迷路。 –

我不认为你可以任意做。你可以像下面这样使用1个语句来做,但是我不知道这样做对你来说会比在简单的CREATE TABLE LIKE查询之后做更改更好。

You could do: 
CREATE TABLE Dog AS 
    (SELECT PersonFirstName AS DogFirstName, PersonLastName AS DogLastName FROM Person); 

另一种方式(显然)是用SQL之外的另一种语言编写脚本。

你可以做的另一件事就是让现有的列名从桌子上

SELECT @colname := `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`='YOURDATABASE' AND `TABLE_NAME`='YOURTABLE' limit 0, 1; 

然后用mysql子()砍下前缀。

set @chopped = substring(@colname, ....) 

然后将另一个mysql变量设置为新的前缀。

set @newprefix = '' 

然后运行一个CREATE TABLE AS查询并对变量(新的前缀+斩波列名称)进行连接。这会很快变得复杂。

我认为从别人的意见很明显,你不应该尝试在mysql中自动执行此操作。最好使用可以轻松运行逻辑的脚本。

+0

用什么语言写脚本? –