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
如何在不创建新表的情况下执行此操作?
谢谢! 卢卡斯
答案 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]
的值将自动更改。