以特殊格式获取期间

问题描述

我尝试定义sql函数以从整数输入(秒)返回格式DAY:HOUR:MINUTE。

内部查询应该如何?

解决方法

在标准SQL中,您将编写:

time '00:00:00' + 5000 * interval '1 second'

您可以在操作here中看到它。

但是,并非所有数据库都支持此功能。而且日期/时间函数众所周知是依赖数据库的。

在SQL Server中,您可以使用:

select convert(time,dateadd(second,5000,0))
,

这可能是一个很长的代码,但我相信它会起作用

DECLARE @INPUT AS INT = 5000
DECLARE @HOUR AS INT
DECLARE @MINUTE AS INT
DECLARE @SEC AS INT

SET @HOUR = @INPUT / (60 * 60)
SET @INPUT = @INPUT - (@HOUR * 60 * 60)
SET @MINUTE = @INPUT / 60
SET @INPUT = @INPUT - (@MINUTE * 60)
SET @SEC = @INPUT

SELECT cast(@HOUR AS NVARCHAR(10)) + ':' + replace(str(@MINUTE,2,0) + ':' + str(@SEC,0),' ','0')

更新

刚注意到您在结果中也包含了 day ,因此,如果需要这一天,查询应该是:

DECLARE @INPUT AS INT = 432010
DECLARE @DAY AS INT
DECLARE @HOUR AS INT
DECLARE @MINUTE AS INT
DECLARE @SEC AS INT

SET @DAY = @INPUT / (24 * 60 * 60)
SET @INPUT = @INPUT - (@DAY * 24 * 60 * 60)
SET @HOUR = @INPUT / (60 * 60)
SET @INPUT = @INPUT - (@HOUR * 60 * 60)
SET @MINUTE = @INPUT / 60
SET @INPUT = @INPUT - (@MINUTE * 60)
SET @SEC = @INPUT

SELECT CAST(@DAY AS NVARCHAR(10)) + ':' + REPLACE(STR(@HOUR,0) + ':' + STR(@MINUTE,0) + ':' + STR(@SEC,'0')

此示例返回5:00:00:10,表示Five days and 10 seconds

,

还有另一个选择

示例

Declare @YourTable table (SomeCol int)
Insert Into @YourTable values
 (5000),(95000)

Select left(SomeCol/86400,3)
       +':'
       +left(convert(time,DATEADD(second,SomeCol,0)),8)
  From @YourTable

返回

(No column name)
0:01:23:20
1:02:23:20