2017-01-05 89 views
0

我有一个表格,其中有一个叫做[avg time to answer]的日期时间字段。对于某些记录,时间显示不正确,如下所示:更正时间

1899-12-30 01:04:00.000 
1899-12-30 01:05:00.000 
1899-12-30 01:30:00.000 

这里显示的时间是错误的。上面显示的时间是小样本,但他们需要在几分钟内而不是几小时和几分钟格式化

有没有一种方法来纠正这与SQL脚本作为替代涉及到再次提取数据,这将是非常困难和耗时的事情。

+1

有,但你将如何找出那些*某些*记录? – GurV

+0

你想将分钟的值移到秒和小时到分钟? –

+0

正确我想将时间显示为00:01:30,当前显示为01:30:00,并将分钟显示为秒。我不确定如何识别特定的记录,但这是可以理解的。 – Tom

回答

1

您可以使用DATEPART

返回表示指定日期的指定部分的整数。

DATEADD联合:

返回指定日期与指定数目的时间间隔(带符号的整数)加入到该日期的指定datepart。

实施例:

DECLARE @val AS DATETIME = '1899-12-30 01:30:00.000'; 

SELECT @val; -- 1899-12-30 01:30:00.000 

SET @val = DATEADD(SECOND, DATEPART(MINUTE, @val), 
        DATEADD(MINUTE, (DATEPART(HOUR, @val)), 
          CAST(CAST(@val AS DATE) AS DATETIME))); 

SELECT @val; -- 1899-12-30 00:01:30.000 

此连铸值到date,以剥离时间部分和回datetime的时间设定为00:00:00。然后根据小时值和基于分钟值的秒数添加分钟数。

您可以将此与UPDATE声明一起使用,但要确保您使用WHERE子句来避免更新所有内容,除非这是您的意图。

示例更新查询:

CREATE TABLE #temp 
    (
     AvgTimeToAnswer DATETIME 
    ); 

INSERT INTO #temp 
     (AvgTimeToAnswer) 
VALUES ('1899-12-30 01:30:00.000'); 

SELECT * 
FROM #temp; -- 1899-12-30 01:30:00.000 

UPDATE #temp 
SET  AvgTimeToAnswer = DATEADD(SECOND, DATEPART(MINUTE, AvgTimeToAnswer), 
           DATEADD(MINUTE, 
             (DATEPART(HOUR, AvgTimeToAnswer)), 
             CAST(CAST(AvgTimeToAnswer AS DATE) AS DATETIME))); 
-- WHERE some condition 

SELECT * 
FROM #temp; -- 1899-12-30 00:01:30.000 

DROP TABLE #temp;