添加列 - 请改进我的代码

时间:2014-01-16 23:30:30

标签: sql-server date-format

SQL Server的新手。我试图找到一种方法来轻松地向表中添加新列。它只是采用现有的日期列并给它一个不同的格式。我可以让它工作的唯一方法是创建一个新表,然后删除旧表,并重命名新表..非常低效肯定

Use [Manipulate MC BS]
select*,
 CONVERT(date,[Time_stamp], 103) AS [Date Fixed]
into [Website Interactions - Raw2]
from [Website Interactions - Raw]
drop table [Website Interactions - Raw]
Use [Manipulate MC BS]
Go
sp_RENAME 'Website Interactions - Raw2','Website Interactions - Raw'
Go

如何在不创建新表的情况下执行此操作?

谢谢! 卢卡斯

3 个答案:

答案 0 :(得分:1)

你试过吗

ALTER TABLE [Website Interactions - Raw]
ADD [Date Fixed] TIMESTAMP

(使用您需要的任何数据类型,我使用TIMESTAMP作为示例)

然后你可以做类似的事情:

UPDATE [Website Interactions - Raw]
SET [Date Fixed]=CONVERT(date,[Time_stamp], 103)
WHERE 1;

如果您对所有行进行更新,则不需要最后一个WHERE 1。 如果您只需要更新一些,请设置条件:WHERE some_column=some_value;

是的,这仍然是2个查询,但是应该比将表复制到另一个表更有效,然后删除原始表并将新表重命名为旧表...

希望这有帮助。

答案 1 :(得分:1)

将datetime或date数据类型保存为字符串(Varchar,Char)数据类型不是一个好习惯 但如果你想这样做,你可以做这样的事情。

ALTER TABLE TABLE_NAME
ADD NewColumn VARCHAR(10) DEFAULT CONVERT(date,GETDATE(), 103)

更新专栏。

UPDATE TABLE_NAME
SET NewColumn = CONVERT(date,GETDATE(), 103)

我的建议

将数据存储在DATE或DATETIME中,如下所示

ALTER TABLE TABLE_NAME
ADD NewColumn DATE DEFAULT GETDATE()

同样,您需要更新表中现有记录的列。

删除表并创建新表可能看起来更容易。但如果您在桌面上有任何外键或权限,您可能会遇到问题。

答案 2 :(得分:1)

我认为你应该只添加一个计算列。这些不会占用额外的存储空间,但可以让您查看结果。该函数是表的“内置”,有点像在表中有一个视图。您可以阅读here

在你的情况下,你会这样做:

ALTER TABLE
    ADD COLUMN [Date Fixed] AS CONVERT(date,[Time_stamp], 103);

这很方便。如果您在[Time_stamp]中添加新行或更改数据,[Date Fixed]的值将自动更改。