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 中提取资产信息