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

时间:2016-07-22 08:45:32

标签: sql sql-server datetime

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

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

但SQL Server 2005并不识别TIME类型。

有人可以告诉我一种方法吗?

非常感谢!

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

您可以使用 xAxis: { axisLabel: 'Date', tickFormat: function (d) { return d3.time.format('%a %b %e %H:%M:%S %Y')(new Date(d)) } DATEADD,假设时间栏的日期部分始终是30/12/1899:

DATEDIFF

结果:

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

答案 2 :(得分:1)

如您所见,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个字节存储自午夜以来的分钟数。 datetime值四舍五入为.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,希望完全适合你。 如果有任何问题,请告诉我。喜欢解决:)