42

DURATIONNumber of Minutes を計算する列を持つ選択クエリがあります。hh:mmそれらの議事録を形式に変換したい。

期間には次のような値があります60, 120,150

例えば:

6001:00時間になります

12002:00時間になります

15002:30時間になります

また、これはDURATIONMinutes)を取得する方法です

DATEDIFF(minute, FirstDate,LastDate) as 'Duration (Minutes)'
4

12 に答える 12

65

期間を日付に変換してから、フォーマットすることができます。

DECLARE
    @FirstDate datetime,
    @LastDate datetime

SELECT
    @FirstDate = '2000-01-01 09:00:00',
    @LastDate = '2000-01-01 11:30:00'

SELECT CONVERT(varchar(12), 
       DATEADD(minute, DATEDIFF(minute, @FirstDate, @LastDate), 0), 114) 

/* Results: 02:30:00:000 */

精度を下げるには、varchar のサイズを変更します。

SELECT CONVERT(varchar(5), 
       DATEADD(minute, DATEDIFF(minute, @FirstDate, @LastDate), 0), 114) 

/* Results: 02:30 */
于 2013-07-18T21:03:08.837 に答える
21

この関数は、分単位の期間を読み取り可能な時間と分の形式に変換することです。つまり2時間30分。期間が 1 時間未満の場合は時間を削除し、期間が時間単位の場合は時間のみを表示し、余分な分はありません。

CREATE FUNCTION [dbo].[MinutesToDuration]
(
    @minutes int 
)
RETURNS nvarchar(30)

AS
BEGIN
declare @hours  nvarchar(20)

SET @hours = 
    CASE WHEN @minutes >= 60 THEN
        (SELECT CAST((@minutes / 60) AS VARCHAR(2)) + 'h' +  
                CASE WHEN (@minutes % 60) > 0 THEN
                    CAST((@minutes % 60) AS VARCHAR(2)) + 'm'
                ELSE
                    ''
                END)
    ELSE 
        CAST((@minutes % 60) AS VARCHAR(2)) + 'm'
    END

return @hours
END

この機能を使用するには:

SELECT dbo.MinutesToDuration(23)

結果:23分

SELECT dbo.MinutesToDuration(120)

結果: 2時間

SELECT dbo.MinutesToDuration(147)

結果:2時間27分

お役に立てれば!

于 2013-11-10T07:58:54.147 に答える
9

これらが最良の選択肢であるかどうかはわかりませんが、間違いなく仕事を成し遂げることができます:

declare @durations table
(
    Duration int
)

Insert into @durations(Duration)
values(60),(80),(90),(150),(180),(1000)

--Option 1 - Manually concatenate the values together
select right('0' + convert(varchar,Duration / 60),2) + ':' + right('0' + convert(varchar,Duration % 60),2)
from @Durations

--Option 2 - Make use of the time variable available since SQL Server 2008
select left(convert(time,DATEADD(minute,Duration,0)),5)
from @durations

GO
于 2013-07-18T21:03:22.743 に答える
2

A Ghazal のおかげで、まさに私が必要としていたものです。彼(彼女)の答えを少し整理したバージョンを次に示します。

create FUNCTION [dbo].[fnMinutesToDuration]
(
    @minutes int 
)
RETURNS nvarchar(30)

-- Based on http://stackoverflow.com/questions/17733616/how-to-convert-number-of-minutes-to-hhmm-format-in-tsql

AS

BEGIN

return rtrim(isnull(cast(nullif((@minutes / 60)
                                , 0
                               ) as varchar
                        ) + 'h '
                    ,''
                   )
            + isnull(CAST(nullif((@minutes % 60)
                                 ,0
                                ) AS VARCHAR(2)
                         ) + 'm'
                     ,''
                    )
            )

end
于 2015-08-12T15:49:27.367 に答える
1

60 が 01:00 時間、120 が 02:00 時間、150 が 02:30 時間になるように結果を取得することに関心がある場合は、次の関数が役立ちます。

    create FUNCTION [dbo].[MinutesToHHMM]
(
    @minutes int 
)
RETURNS varchar(30)
AS

BEGIN
declare @h int
        set @h= @minutes / 60
        declare @mins varchar(2)
        set @mins= iif(@minutes%60<10,concat('0',cast((@minutes % 60) as varchar(2))),cast((@minutes % 60) as varchar(2)))
return iif(@h <10, concat('0', cast(@h as varchar(5)),':',@mins)
        ,concat(cast(@h as varchar(5)),':',@mins))

end
于 2019-10-14T05:26:50.120 に答える
0

私は次のことを行います(以下のすべてのものをイミディエイトウィンドウ/クエリウィンドウにコピーアンドペーストして実行します)

DECLARE @foo int
DECLARE @unclefoo smalldatetime
SET @foo = DATEDIFF(minute, CAST('2013.01.01 00:00:00' AS datetime),CAST('2013.01.01 00:03:59' AS datetime)) -- AS 'Duration (Minutes)'

SET @unclefoo = DATEADD(minute, @foo, '2000.01.01')

SELECT CAST(@unclefoo AS time)

@foo質問で生成した値を保存します。「トリック」は次のとおりです。変数(私の場合はフォーマット)
を作成し、それを値でインクリメントしてから、その部分のみを表示(または必要に応じて保存)します。smalldatetimeyyyy.mm.ddinttime

于 2013-07-18T21:10:53.017 に答える