【发布时间】:2021-03-02 12:29:41
【问题描述】:
我想将两个 datetime2 列(分别称为 Date 和 Time)合并到同一个表中的一个 datetime2 列中。之后将删除 2 个旧列。
此查询在测试组合时有效。
SELECT CAST(DATEADD(day, 0, DATEDIFF(day, 0, Date)) AS DATETIME)
+ CAST(DATEADD(day, 0 - DATEDIFF(day, 0, Time), Time) AS DATETIME)
FROM dbo.Orders
目前我已经尝试了以下方法,但我不知道如何将结果放入名为 OrderDate 的现有列中。
已解决
UPDATE dbo.Orders
SET
OrderDate = CAST(DATEADD(day, 0, DATEDIFF(day, 0, Date)) AS DATETIME)
+ CAST(DATEADD(day, 0 - DATEDIFF(day, 0, Time), Time) AS DATETIME);
【问题讨论】:
-
这告诉你到底是什么问题,我怀疑你的表
dbo.Orders只有1行。 -
您不能在
datertime2字段中存储时间。如果要存储时间,请使用time。如果您只想存储日期,请使用date。 -
为什么要对同一个表使用子查询?为什么您想要将每一行的值设置为包含数据库中每一行的值?当然,您根本不需要在这里进行子查询。
标签: sql sql-server tsql