2016-07-22 79 views
0

在SQL Server 2005中,我正在詢問一些舊的遺留數據,並且需要將datetime列的日期組件與另一列中的時間組件組合。這裏有一個例子:SQL Server - 將DATETIME的DATE部分添加到DATETIME的TIME部分

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

我需要轉換爲以下日期時間的最終結果是:

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

我嘗試使用:

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

但是SQL Server 2005不識別的類型時間。

有人可以告訴我一種方法嗎?

非常感謝!

+1

'dateadd(ss,datediff(ss,'18991230'' –

回答

2

你可以只使用DATEADDDATEDIFF,假設時間列的日期部分總是30/12/1899 :

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 
+0

這個答案幫助,謝謝! – user2430797

2

時間列轉換爲字符串HH:MM:SS,並添加到日期列

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

正如你可以看到SQL 2005中支持的以下數據類型: https://msdn.microsoft.com/en-us/library/ms187819(v=sql.90).aspx

使用datetime和smalldatetime,smalldatetime數據類型存儲的日期和日期的時間精度不如datetime。數據庫引擎將smalldatetime值存儲爲兩個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,希望完全可以爲您工作。 讓我知道是否有問題。愛解決:)

+0

我試過了,它返回:從datetime數據類型轉換爲smalldatetime數據類型導致smalldatetime溢出錯誤 – user2430797

+1

這將工作,因爲1900年以下是錯誤原因 SELECT CAST('2016-05-09 00:00:00.000'AS DATETIME)+ CAST('1900-01-01 12:26:00.000' AS smalldatetime)AS Result日期時間 – khawarPK

+0

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