2017-01-05 84 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;