2017-07-17 100 views
0

我需要將毫秒值85605304.3587轉換爲像0d 18h 21m這樣的值。 不知道如何開始,有什麼類似於SQL中的TimeSpan,就像在C#中一樣?SQL將毫秒轉換爲天,小時,分鐘

+3

您正在使用哪個[DBMS](https://en.wikipedia.org/wiki/DBMS)? Postgres的?甲骨文?標準SQL中的數據類型(這是'sql'標記引用的內容)將是'interval' –

+0

SQL 2017是我正在使用的 –

+1

沒有標準名爲「SQL 2017」,但我想你的意思是「SQL **服務器** 2017「 –

回答

3

您可以明確地進行計算。我認爲它是:

select floor(msvalue/(1000 * 60 * 60 * 24)) as days, 
     floor(msvalue/(1000 * 60 * 60)) % 24 as hours, 
     floor(msvalue/(1000 * 60)) % 60 as minutes 

注:有些數據庫使用mod,而不是%

+0

第3行中的第1個括號使其無法運行。 – KtX2SkD

+0

是的,但它確實工作,一旦刪除,謝謝:) –

0

在MS SQL Server,你可以使用下面的代碼:

with cte as (
    select cast(85605304.3587 as int)/1000/60 as [min] 
), cte2 as (
    select 
     cast([min] % 60 as varchar(max)) as minutes, 
     cast(([min]/60) % 24 as varchar(max)) as hours, 
     cast([min]/(60 * 24) as varchar(max)) as days 
    from cte 
) 
select concat(days, 'd ', hours, 'h ', minutes, 'm') as tm 
from cte2 
1

使用本機date & time functions,也許:

SELECT 
    AsDateTime = DATEADD(MILLISECOND, 85605304, 0) 
    , AsDateTime2 = DATEADD(NANOSECOND, 7 * 100, DATEADD(MICROSECOND, 358, DATEADD(MILLISECOND, 85605304, CONVERT(datetime2, CONVERT(datetime, 0))))) 
-- Incorrect datetime2 approach I initially did, has some precision loss, probably due to datetime's millisecond issue with 0's, 3's, and 7.'s 
--SELECT DontDoThis = DATEADD(NANOSECOND, 7 * 100, DATEADD(MICROSECOND, 358, CONVERT(datetime2, DATEADD(MILLISECOND, 85605304, 0)))) 

datetime只包括3個數字超越秒,而datetime2將保持7個位數。也許其他方式存在類似日期的對象,我不知道。

相關問題