簡體   English   中英

如何在SQL Server中將時間從dd:hh:mm:ss格式化為僅hh:mm:ss?

[英]How to format time from dd:hh:mm:ss to only hh:mm:ss in SQL server?

我發現SQL函數將第二個作為輸入參數,並以dd:hh:mm:ss格式返回秒,例如93600秒,它將返回1:02:00:00

這意味着1天2小時0分0秒。

我使用的功能是:

FUNCTION [dbo].[udfTimeSpanFromSeconds]
(
    @Seconds int
)
RETURNS varchar(15)
AS
BEGIN
DECLARE 
    --Variable to hold our result
      @DHMS varchar(15)
    --Integers for doing the math
    , @Days int --Integer days
    , @Hours int --Integer hours
    , @Minutes int --Integer minutes
    --Strings for providing the display
    , @sDays varchar(5) --String days
    , @sHours varchar(2) --String hours
    , @sMinutes varchar(2) --String minutes
    , @sSeconds varchar(2) --String seconds

--Get the values using modulos where appropriate
SET @Hours = @Seconds/3600
SET @Minutes = (@Seconds % 3600) /60
SET @Seconds = (@Seconds % 3600) % 60

--If we have 24 or more hours, split the @Hours value into days and hours
IF @Hours > 23 
BEGIN
    SET @Days = @Hours/24
    SET @Hours = (@Hours % 24)
END
ELSE
BEGIN
    SET @Days = 0
END

--Now render the whole thing as string values for display
SET @sDays = convert(varchar, @Days)
SET @sHours = RIGHT('0' + convert(varchar, @Hours), 2)
SET @sMinutes = RIGHT('0' + convert(varchar, @Minutes), 2)
SET @sSeconds = RIGHT('0' + convert(varchar, @Seconds), 2)

--Concatenate, concatenate, concatenate
SET @DHMS =  @sDays + ':' + @sHours + ':' + @sMinutes + ':' + @sSeconds

RETURN @DHMS

END

並選擇將檢索輸出的命令是

select dbo.udfTimeSpanFromSeconds('93600' )

結果顯示為:

在此處輸入圖片說明

現在我需要以hh:mm:ss格式的輸出,例如對於當前示例26:00:00這意味着26小時0分鍾0秒。

我正在使用SQL Server2008。在此先感謝。

你可以用數學做到這一點

DECLARE @sec INT = 93600

SELECT
    CONVERT(VARCHAR(10), (@sec / 3600)) + ':' +
    RIGHT('0' + CONVERT(VARCHAR(2), ((@sec % 3600) / 60)), 2) + ':' +
    RIGHT('0' + CONVERT(VARCHAR(2), (@sec % 60)), 2)

寫成函數:

CREATE FUNCTION udfTimeSpanFromSeconds(
    @sec INT
)
RETURNS VARCHAR(15)
AS
BEGIN
RETURN 
    CONVERT(VARCHAR(10), (@sec / 3600)) + ':' +
    RIGHT('0' + CONVERT(VARCHAR(2), ((@sec % 3600) / 60)), 2) + ':' +
    RIGHT('0' + CONVERT(VARCHAR(2), (@sec % 60)), 2)
END

樣品電話:

SELECT dbo.udfTimeSpanFromSeconds(360000)

結果:

100:00:00

如果要讓函數返回hh:mm:ss,則必須如下所示。 但是,這確實將總時間限制為少於100小時。 您可以通過更改right子句並增加返回的字符串的長度來增加Hours String的長度來解決此問題,正如我現在所做的說明。

(通常,對時間進行累加后,通常將總數除以3600.00即可得出一個十進制值,以用於進一步的計算,例如,如果您按小時付款)

FUNCTION [dbo].[udfTimeSpanFromSeconds]
(
    @Seconds int
)
RETURNS varchar(10)
AS
BEGIN
DECLARE 
    --Variable to hold our result
      @HMS varchar(15)
    --Integers for doing the math
    , @Hours int --Integer hours
    , @Minutes int --Integer minutes
    --Strings for providing the display
    , @sHours varchar(2) --String hours
    , @sMinutes varchar(2) --String minutes
    , @sSeconds varchar(2) --String seconds

--Get the values using modulos where appropriate
SET @Hours = @Seconds/3600
SET @Minutes = (@Seconds % 3600) /60
SET @Seconds = (@Seconds % 3600) % 60

--Now render the whole thing as string values for display
SET @sHours = RIGHT('0' + convert(varchar(5), @Hours), 3)
SET @sMinutes = RIGHT('0' + convert(varchar(3), @Minutes), 2)
SET @sSeconds = RIGHT('0' + convert(varchar(3), @Seconds), 2)

--Concatenate, concatenate, concatenate
SET @HMS =  @sHours + ':' + @sMinutes + ':' + @sSeconds

RETURN @HMS

END

如果您要返回100個小時,則必須使用它:-

FUNCTION [dbo].[udfTimeSpanFromSeconds]
(
    @Seconds int
)
RETURNS varchar(8)
AS
BEGIN
DECLARE 
--Variable to hold our result
  @HMS varchar(15)
--Integers for doing the math
, @Hours int --Integer hours
, @Minutes int --Integer minutes
--Strings for providing the display
, @sHours varchar(3) --String hours
, @sMinutes varchar(2) --String minutes
, @sSeconds varchar(2) --String seconds

--Get the values using modulos where appropriate

SET @Hours = @Seconds/3600
SET @Minutes = (@Seconds % 3600) /60
SET @Seconds = (@Seconds % 3600) % 60

--Now render the whole thing as string values for display
SET @sHours = RIGHT('0' + convert(varchar, @Hours), 3)
SET @sMinutes = RIGHT('0' + convert(varchar, @Minutes), 2)
SET @sSeconds = RIGHT('0' + convert(varchar, @Seconds), 2)

--Concatenate, concatenate, concatenate
SET @HMS =  @sHours + ':' + @sMinutes + ':' + @sSeconds

RETURN @HMS

END

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM