2015-12-02 37 views
0

我有一個表在該日期和時間已分開,時間以int格式給出。我必須合併日期時間格式的日期和時間列,如dd:mm:yyy hh:mm:ss 。這個合併值應該插入到需要輸出的「MergeDT」列中。 我已經在MergeDT列中提到了輸出。轉換int到時間

ID | DATE_TAKEN   | TIME |   MergeDT   | 
---------------------------------------------------------------------- 
1 | 2005-08-01 00:00:00 | 702 | 2005-08-01 07:02:00  | 
---------------------------------------------------------------------- 
2 | 2005-08-01 00:00:00 | 702 | 2005-08-01 07:02:00  | 
----------------------------------------------------------------------  
3 | 2005-08-01 00:00:00 | 702 | 2005-08-01 07:02:00  | 
----------------------------------------------------------------------- 
4 | 2003-01-22 00:00:00 | 1603 | 2003-01-22 16:03:00  | 
----------------------------------------------------------------------- 
5 | 2005-08-01 00:00:00 | 702 | 2005-08-01 07:02:00  | 
----------------------------------------------------------------------- 
6 | 2005-08-01 00:00:00 | 3 |  2005-08-01 00:03:00 | 
----------------------------------------------------------------------- 
7 | 2005-08-01 00:00:00 | 504 | 2005-08-01 05:04:00  | 
----------------------------------------------------------------------- 
8 | 2003-01-22 00:00:00 | 1646 | 2003-01-22 00:00:00  | 
----------------------------------------------------------------------- 
+0

請把你的代碼在這裏... –

+0

是什麼時間字段的值?如果它是從一天開始的秒數 - 那麼你可以使用'dateadd'和'ss' datepart並更新你的MergeDT列。 –

+0

@KaushikMaheta哪個代碼? – vim

回答

2

應該沿着這些路線的東西:

UPDATE UnnamedTable SET MergeDT = DATEADD(hour, [time]/100, 
            DATEADD(minute,[time] % 100,DATE_TAKEN)) 

回覆:混亂數據表示。 SQL Server中的日期時間數據類型以緊湊的二進制表示形式存儲數據。他們不存儲任何格式信息。我想沒有人會感到驚訝的是以下幾點:

declare @t int 
set @t = 0x0D 
print @t 

打印13而不是0x0D,然而人們似乎永遠驚訝的是,同樣的邏輯也適用於日期類型 - 它們存儲的數據以單一一致的格式存儲,而不是存儲用於設置其值的字符串表示。

+0

我試過你的查詢,它是非常接近702解決方案。它現在給出07:02:00.0000000。我只需要07:02:00 – vim

+0

@vim - 「MergeDT」的數據類型是什麼?如果它應該是'datetime2'列,那麼這是正確的。存儲的是日期時間值的* binary *表示,管理工作室在顯示*數據時將轉換爲*字符串*,默認情況下,管理工作室將該轉換包含所有尾隨零。不要混淆*數據*(存儲的內容)和*表示*(向您顯示的內容)。沒有*格式*信息與數據一起存儲。 –

+0

數據類型是合併時間 – vim

0

轉換時間以整數格式(通常秒)時間在SQL Server如下。

declare @t int 
set @t = 110 

select cast((@t/60) as varchar(2)) + ':' + cast((@t % 60) as varchar(2)) 
+0

這是不是在秒。像702意味着07:02:00 – vim

0

如果我明白你correclty需要這樣的事:

SELECT CONVERT(DATETime, SUBSTRING(DATE_TAKEN, 0, 10) + ' ' + select cast(([TIME]/100) as varchar(2)) + ':' + cast(([TIME] % 100) as varchar(2)) + ':00')