在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)
您可以只使用DATEADD
和DATEDIFF
,假设时间列的日期部分始终为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,希望这对你有用。如果有任何问题,请告诉我。爱下决心:)