SQL Server-将DATETIME的DATE部分添加到DATETIME中的TIME部分



在SQL Server 2005中,我正在查询一些旧的遗留数据,需要将日期时间列的日期组件与另一列的时间组件结合起来。这里有一个例子:

DateColumn: 2016-05-09 00:00:00.000
TimeColumn: 1899-12-30 12:26:00.000

我需要将最终结果转换为以下DateTime:

ResultDateTime: 2016-05-09 12:26:00.000

我尝试使用:

CAST(DateColumn AS DATETIME) + CAST(TimeColumn AS TIME) AS ResultDateTime

但是SQLServer2005无法识别TIME类型。

有人能告诉我一种方法吗?

非常感谢!

将时间列转换为字符串HH:MM:SS并添加到日期列

ResultDatetIme = DateColumn + convert(varchar(10), TimeColumn, 108)

您可以只使用DATEADDDATEDIFF,假设时间列的日期部分始终为1899年12月30日:

declare @t table (DateColumn datetime,TimeColumn datetime)
insert into @t(DateColumn,TimeColumn) values
('2016-05-09T00:00:00.000','1899-12-30T12:26:00.000')
select DATEADD(millisecond,DATEDIFF(millisecond,'18991230',TimeColumn),DateColumn)
from @t

结果:

-----------------------
2016-05-09 12:26:00.000

如您所见,SQL 2005支持以下数据类型:https://msdn.microsoft.com/en-us/library/ms187819(v=sql.90).aspx

使用datetime和smalldatetime。smalldatetime数据类型存储的日期和时间的精度低于datetime。数据库引擎将smalldatetime值存储为两个2字节整数。前2个字节存储1900年1月1日之后的天数。其他2个字节存储自午夜以来的分钟数。日期时间值四舍五入为.000、.003或.007秒的增量,如下表所示。

SELECT CAST('2016-05-09 00:00:00.000' AS DATETIME) + CAST('1900-01-01 12:26:00.000' AS smalldatetime) AS ResultDateTime
Result: 2016-05-09 12:26:00.000

所以你可以使用datetime和smalldatetime,希望这对你有用。如果有任何问题,请告诉我。爱下决心:)

相关内容

  • 没有找到相关文章

最新更新