1

Excel 内置日期格式[h] 的翻译:mm:ss在 T-SQL 或任何 SQL 平台中?

例子:

    General [h]:mm:ss   [mm]:ss     [ss]
   1.00000  24:00:00    1440:00         86400
   1.00000  24:00:00    1440:00         86400

   2.00000  48:00:00    2880:00         172800

对于 T-SQL,我将选择

Without century (yy) (1)    With century (yyyy) Standard    Input/Output (3)
  14                             114                   -    hh:mi:ss:mmm(24h)

或者默认为 108,我很清楚我是否必须重新创建一个可以执行 hh:mi:ss:mmm( +24h ) 的函数?

非常欢迎评论;

4

1 回答 1

3

虽然 SQL Server 的time数据类型应该映射到 CLR 的时间跨度数据类型,但它只支持小于 24 小时的间隔。

SQL Serverdatediff在计算间隔时也很棘手,因为它计算了两个日期时间之间的日期部分边界。例如,这应该是 1 秒的间隔,但如果您询问小时,datediff 会告诉您这是一个小时:

select datediff(hh, '2013-01-01T23:59:59', '2013-01-02T00:00:00')
-- Returns 1

因此,您可能不得不推出自己的功能,但希望这个答案可以帮助您入门:

-- Setup test data
declare @minDate datetime = '2012-12-12 20:16:47.160'
declare @maxDate datetime = '2012-12-17 15:10:12.050'

-- Get timespan in hh:mi:ss
select cast(
        (cast(cast(@maxDate as float) - cast(@minDate as float) as int) * 24) /* hours over 24 */
        + datepart(hh, @maxDate - @minDate) /* hours */
        as varchar(10))
    + ':' + right('0' + cast(datepart(mi, @maxDate - @minDate) as varchar(2)), 2) /* minutes */
    + ':' + right('0' + cast(datepart(ss, @maxDate - @minDate) as varchar(2)), 2) /* seconds */

-- Returns 114:53:24
于 2013-02-06T22:31:27.970 回答