2015-12-02 89 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')