SQL将毫秒转换为天,小时,分钟
答
您可以明确地进行计算。我认为它是:
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
是的,但它确实工作,一旦删除,谢谢:) –
答
在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
答
使用本机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个位数。也许其他方式存在类似日期的对象,我不知道。
您正在使用哪个[DBMS](https://en.wikipedia.org/wiki/DBMS)? Postgres的?甲骨文?标准SQL中的数据类型(这是'sql'标记引用的内容)将是'interval' –
SQL 2017是我正在使用的 –
没有标准名为“SQL 2017”,但我想你的意思是“SQL **服务器** 2017“ –