簡體   English   中英

與日期時間的分鍾差

[英]Difference in minutes from datetime

我正在嘗試從兩個時間戳列(日期時間)獲得總的時差

我目前有一個類似於以下內容的表1設置:

  • Time_Line_Down =>日期時間
  • Time_Line_Ran =>日期時間
  • Total_Downtime =>計算公式為:

    (當[Time_Line_Down]為NULL則為NULL否則CONVERT([varchar],當[Time_Line_Ran]為NULL則為NULL否則為[Time_Line_Ran]-[Time_Line_Down]結束,((108))結束)

每次發生某些情況時,我都會將這三列(我有更多列,但問題在於此)復制到另一個表2中 ,該最初是如下設置的:

  • Time_Line_Down =>日期時間
  • Time_Line_Ran =>日期時間
  • Total_Downtime =>日期時間

然后,我使用Excel電子表格從SQL Server“獲取外部數據”,並使用數據透視表處理數據。

  • Time_Line_Down = 2015-02-20 12:32:40.000
  • Time_Line_Ran = 2015-02-20 12:34:40.000
  • Total_Downtime = 1900-01-01 00:02:00.000

期望的輸出

我希望數據透視表能夠使該表中所有行的停機時間總計

假設這是45小時50分30秒的累積停機時間,它應該顯示為(45:50:30)

問題

即使我將excel數據透視表中的Total_Downtime列的格式設置為h:mm:ss ,也是如此:

  • Total_Downtime = 0:02:00

隨着行的累積和總計的計算,時間戳的“日期”部分混亂,結果是超過24小時

我嘗試過的

我將表2中的 Total_Downtime列的數據類型格式更改為time(0),以使它不會發送時間戳的“日期”部分,而僅發送“時間”部分,並且可以讀取00:02: 00

但是現在,無論該SQL表中實際上是什么值,該列上excel上我的數據透視表中的所有值都是0:00:00。

有什么建議么?

您可以使用Excel時間格式[h]:mm:ss ,該時間格式可以超過24小時。

或者,您可以使用SQL函數DATEDIFF來獲取總停機時間(以秒為單位),然后將其轉換為,但是您需要在Excel中顯示它,例如

case when [Time_Line_Down] IS NULL then NULL else case when [Time_Line_Ran] IS NULL then NULL else datediff(ss, Time_Line_Ran, Time_Line_Down) end end

我認為這里不需要CASE語句,您可以使用

datediff(ss, Time_Line_Ran, Time_Line_Down)

謝謝大家的幫助,

我按照建議嘗試了函數DATEDIFF,將表1計算列公式和表2 Total_Downtime列數據類型更改為int。 導入excel后,此數值需要一些額外的計算。

原則上講,這是最好的答案,並且對於任何試圖從兩個時間戳計算出差異的人都應該很有效,如前所述。

但是在我的情況下,我需要維護兩件事:

1) 表1中的 Total_Downtime列的格式00:00:00,在使用DATEDIFF時已更改為整數值

2)Excel中的數據透視表Total_Downtime列格式[h]:mm:ss(由TobyLL建議),需要幾步計算才能從秒轉換

在得知每次我從表1復制到表2時 ,計算值(例如00:02:00)都更改為1900-01-01 00:02:00.000,並且將其導入Excel時等於1.001388889,因此我決定強制將時間戳的“日期”部分設置為1899-12-31,以便Excel僅使用“時間”(十進制)部分來計算數據透視表中的總計。

暫無
暫無

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

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