![](/img/trans.png)
[英]Change date time format from YYY-MM-DD HH:MM:SS to YYYY.MM.DD HH:MM:SS in SQL Server
[英]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.