T-SQL在现有表中添加新列,并用另两个现有列中的值填充

T-SQL在现有表中添加新列,并用另两个现有列中的值填充,sql,sql-server,Sql,Sql Server,我有一个带有以下列的表:id,startDate,stopDate,startOvertime,stopOvertime startDate和stopDate属于日期时间类型,startOvertime,stopOvertime属于时间(7)类型 我想创建一个新列,其中日期部分来自stopDate,时间部分来自startOvertime,并将其复制到新创建的列test fill 如果我使用公式(stopDate,startOvertime),那么新的datetime列的值不正确。有什么建议吗?应

我有一个带有以下列的表:
id
startDate
stopDate
startOvertime
stopOvertime

startDate
stopDate
属于日期时间类型,
startOvertime
stopOvertime
属于时间(7)类型

我想创建一个新列,其中日期部分来自
stopDate
,时间部分来自
startOvertime
,并将其复制到新创建的列
test fill

如果我使用公式(stopDate,startOvertime),那么新的datetime列的值不正确。有什么建议吗?

应该这样做:

alter table [table-name] add [test-fill] datetime

update [table-name]
set [test-fill] = cast(startDate as date) + cast(stopOvertime as datetime)

首先,我们向表中添加列,然后用数据更新创建的单元格。

如果您总是希望新列包含此信息,则可以使用计算列:

alter table test add test-fill as
    (cast(cast(startDate as date) as datetime) + cast(overtime as datetime));

这实际上并没有添加新列。它只是在您需要时计算值。

在这种情况下,不仅仅是从startDate获取日期,而是使用datetime和他的时间以及从StopOverTime添加的时间。虽然此代码片段可以解决这个问题,但确实有助于提高您文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。
ALTER TABLE TEST ADD NEWCOL DATETIME;
UPDATE TEST
SET NEWCOL = CAST((CAST(CAST(stopDate as date) as varchar(10))+' '+CAST(CAST(startOvertime as time) as varchar(10))) as DATETIME);