【问题标题】:Getting The Period in Special Format以特殊格式获取期间
【发布时间】:2021-02-12 05:53:09
【问题描述】:

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

内部查询应该怎么做?

【问题讨论】:

  • 请提供样本数据和期望的结果。什么是整数输入?同时标记您正在使用的数据库。
  • 5000 返回 1:23:20
  • 您的意思一定是 HOURS:MINUTES:SECONDS。
  • 数学很简单:seconds / 3600, seconds / 60 % 60, seconds % 60

标签: sql sql-server sql-server-2008-r2


【解决方案1】:

这可能是一个很长的代码,但我相信它可以工作

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, 2, 0), ' ', '0')

更新

刚刚注意到您在结果中也包含了日期,所以如果需要这一天,查询应该是:

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, 2, 0) + ':' + STR(@MINUTE, 2, 0) + ':' + STR(@SEC, 2, 0), ' ', '0')

这里以返回5:00:00:10为例,意思是Five days and 10 seconds

【讨论】:

    【解决方案2】:

    在标准 SQL 中,你会这样写:

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

    你可以在here看到这个。

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

    在 SQL Server 中,您可以使用:

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

    【讨论】:

    • 这应该在 2008R2 中工作。执行此语句时遇到什么错误?
    【解决方案3】:

    另一种选择

    示例

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-13
      • 1970-01-01
      • 2018-03-19
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2014-07-27
      相关资源
      最近更新 更多