簡體   English   中英

如何在SQL Server中添加time數據類型列

[英]How do I add time datatype column in SQL server

我在sql server 2012中有一個表,其中列名為Duration as Time datatype.i想要根據日期差異更新此列,方法是將差異添加到此持續時間列中。我可以在SP中執行此操作。

ID    StartDate               EndDate                 Duration
1     2017-02-27 09:10:35     2017-02-27 09:25:35      00:15
2     2017-02-27 09:26:35   2017-02-27 09:36:35        00:25

Durtion總是不到24小時。

一種方法是:

update t
    set duration = cast(dateadd(ms, datediff(ms, startdate, enddate), 0) as time);

這是個簡單的。 只需使用簡單的算術運算:

DECLARE @TABLE TABLE (Start DATETIME, Finish DATETIME, Duration TIME);

INSERT INTO @TABLE VALUES ('02/28/2017 08:00','02/28/2017 08:30','');
INSERT INTO @TABLE VALUES ('02/28/2017 09:00','02/28/2017 09:40','');
INSERT INTO @TABLE VALUES ('02/28/2017 10:02','02/28/2017 11:53','');
INSERT INTO @TABLE VALUES ('02/28/2017 11:56','02/28/2017 12:45','');
INSERT INTO @TABLE VALUES ('02/28/2017 13:45','02/28/2017 23:59','');

UPDATE @TABLE
SET Duration = Finish - Start;

SELECT * FROM @TABLE;

返回:

Start                    Finish                 Duration
---------------------------------------------------------
28/02/2017 08:00:00      28/02/2017 08:30:00    00:30:00
28/02/2017 09:00:00      28/02/2017 09:40:00    00:40:00
28/02/2017 10:02:00      28/02/2017 11:53:00    01:51:00
28/02/2017 11:56:00      28/02/2017 12:45:00    00:49:00
28/02/2017 13:45:00      28/02/2017 23:59:00    10:14:00

這里唯一需要注意的是他們需要在同一天。 你明確表示持續時間不會超過一天,所以應該沒問題。

如果要將結果添加到Duration的原始值,那么您只需將其添加到...

INSERT INTO @TABLE VALUES ('02/27/2017 08:00','02/28/2017 08:30','00:15');
INSERT INTO @TABLE VALUES ('02/28/2017 09:00','02/28/2017 09:40','00:14');
INSERT INTO @TABLE VALUES ('02/28/2017 10:02','02/28/2017 11:53','00:13');
INSERT INTO @TABLE VALUES ('02/28/2017 11:56','02/28/2017 12:45','02:16');
INSERT INTO @TABLE VALUES ('02/28/2017 13:45','02/28/2017 23:59','00:17');

UPDATE @TABLE
SET Duration = Duration + (Finish - Start);

返回:

Start                    Finish                 Duration
---------------------------------------------------------   
27/02/2017 08:00:00      28/02/2017 08:30:00    00:45:00
28/02/2017 09:00:00      28/02/2017 09:40:00    00:54:00
28/02/2017 10:02:00      28/02/2017 11:53:00    02:04:00
28/02/2017 11:56:00      28/02/2017 12:45:00    03:05:00
28/02/2017 13:45:00      28/02/2017 23:59:00    10:31:00

UPDATE [TABLE] SET [DURATION] = CONVERT(varchar(5),DATEADD(分鍾,DATEDIFF(MINUTE,StartDate,EndDate),0),114);

沒有其他答案試圖將持續時間與您期望的相加。

DECLARE @TABLE TABLE (ID INT, StartTime DATETIME, EndTime DATETIME, Duration TIME);

INSERT INTO @TABLE VALUES (1, '02/28/2017 01:00','02/28/2017 06:30','');
INSERT INTO @TABLE VALUES (2, '02/28/2017 09:00','02/28/2017 23:40','');
INSERT INTO @TABLE VALUES (3, '03/01/2017 10:02','03/01/2017 21:53','');

UPDATE t
SET Duration=
    CONVERT(TIME,
        (
            SELECT DATEADD(ms, SUM(DATEDIFF(ms, '00:00:00.000', EndTime - StartTime)), '00:00:00.000')
            FROM @TABLE it
            WHERE it.EndTime<= t.EndTime
        )
    )
FROM @TABLE t;

SELECT * FROM @TABLE;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM