SQL Server:结合日期列和时间列,插入到日期时间列

Posted

技术标签:

【中文标题】SQL Server:结合日期列和时间列,插入到日期时间列【英文标题】:SQL Server: combine date column and time column, insert into datetime column 【发布时间】:2021-10-22 08:14:28 【问题描述】:

我有一个日期和时间分别存储在日期时间列中的数据库(不是我的想法)。我需要将它们的值组合到另一个带有日期时间列的表中。就这么简单,我就是做不到。

我可以得到我的日期值:

cast(sampledate as date)   --  returns '2014-11-01'

还有我的日期值:

cast(CollectionTime as time)   -- returns '06:46:00.0000000'

我尝试了几种不同的方式将它们组合在一起,看起来不错。

例如:

concat(cast(sampledate as date) , ' ' , cast(CollectionTime as time))  -- returns '2014-11-05 08:14:00.0000000'

但是当我尝试将它插入到日期时间列中,甚至只是将其转换为日期时间值时,它不起作用:

cast(concat(cast(sampledate as date) , ' ' , cast(CollectionTime as time)) as datetime)
--  I get the error 'Conversion failed when converting date and/or time from character string.'

This link 警告我不要使用 FORMAT 功能,而且我去过其他一些网站,告诉我不要做什么,但我似乎无法做这个简单的事情。任何人都可以帮忙吗?谢谢。

编辑:想通了。 This link 解决了旧版本的 SQL,但不是当前版本。但是,如果您转换为 datetime2(0),而不是 datetime,它可以正常工作。

【问题讨论】:

这能回答你的问题吗? ***.com/questions/18622384/… Hassan,谢谢,那些曾经在 SQL2008 中工作的人,但我已经尝试过了,它似乎在 2016 年不起作用。应该在我的问题中指定。 重复链接 fiddle 在当前版本的 sql server 中工作得很好 您可以简单地将两个元素转换为日期时间并将它们相加。看看***.com/questions/68519014/… 【参考方案1】:

正如我在上面评论的,这是一个可以将两个日期时间相加的示例。

如果任一列不是datetime,只需将该列convert 转换为datetime

Declare @YourTable table (sampledate datetime,CollectionTime datetime)
Insert Into @YourTable values
('2019-06-25 00:00:00','09:09:31')


Select *
      ,NewDateTime = sampleDate + CollectionTime
 From  @YourTable

结果

sampledate                CollectionTime            NewDateTime
2019-06-25 00:00:00.000   1900-01-01 09:09:31.000   2019-06-25 09:09:31.000

【讨论】:

以上是关于SQL Server:结合日期列和时间列,插入到日期时间列的主要内容,如果未能解决你的问题,请参考以下文章

如何将当前日期和时间插入到具有 DateTime 类型列的 SQL Server 表中?

比较 SQL Server 中 3 列之间的日期值并在 SQL Server 中提取资产信息

如何将一个字段中的日期与另一字段中的时间结合起来 - MS SQL Server

SQL 根据特定列和日期汇总小计

如何在sql中减去两个日期列和两个时间列

SQL Server:结合 SELECT 和相关的 UDF 结果