arvindcis Ответов: 2

Как получить время в формате чч:мм Из минут


Я использую dbo.Функция MinutesToDuration но ее возвращение
2:7
Но я хочу вот так
02:07



Заранее спасибо !

Что я уже пробовал:

ALTER 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(10)) + ':' + --+ 'h' +  
                CASE WHEN (@minutes % 60) > 0 THEN
                   CAST((@minutes % 60) AS VARCHAR(10)) --+ 'm'
                ELSE
                    ''
                END)
    ELSE 
        CAST((@minutes % 60) AS VARCHAR(10)) --+ 'm'
    END
return @hours

END




SELECT dbo.MinutesToDuration(127) AS TIME

OriginalGriff

Решение обновлено.

2 Ответов

Рейтинг:
4

BinnyVishwant

Тем не менее, я попробовал это сделать, добавив " 0 " и не меняя логику кода.
Пожалуйста, дайте мне знать, если это упростит вашу проблему!

declare
 
    @minutes int=301

 
--RETURNS nvarchar(30)
--AS
BEGIN
declare @hours  nvarchar(20)
SET @hours = 
    CASE WHEN @minutes >= 60 THEN
	        (SELECT RIGHT ('0'+ CAST((@minutes / 60) AS VARCHAR(10)),2) + ':' + --+ 'h' +  
                CASE WHEN (@minutes % 60) > 0 THEN
                   RIGHT('0' + CAST((@minutes % 60) AS VARCHAR(10)),2) --+ 'm'
                ELSE
                    '00'
                END)
    ELSE 
        CAST((@minutes % 60) AS VARCHAR(10)) --+ 'm'
    END 


PS: Если вам нужно увеличить диапазон часов более чем на 100, то просто добавьте 3 вместо 2
VARCHAR(10)),2)


Рейтинг:
17

OriginalGriff

Мы не знаем, что делает ваша функция MinutesTODuration - это не стандартная функция SQL, поэтому вам нужно начать смотреть на это.

Однако, когда я использую переменную времени, я получаю то, что ожидаю:

DECLARE @st TIME(0) = '02:07'
SELECT @st AS TIME
Дает:
TIME
02:07:00
Как и делает
DECLARE @st TIME(0) = '2:7'
SELECT @st AS TIME

Поэтому вам нужно посмотреть, что вы делаете со своим слоем презентации, который форматирует значение времени.

[РЕДАКТИРОВАТЬ]
Итак, вы показали нам свою функцию, которая возвращает не время, а строку ... которые вы специально заполняете не ведущими нулевыми значениями ...

Предполагая, что вы используете SQL 2012 или более позднюю версию:
SET @hours = 
    CASE WHEN @minutes >= 60 THEN
	        (SELECT FORMAT(@minutes / 60, 'd2') + 
                CASE WHEN (@minutes % 60) > 0 THEN
                   ':' + FORMAT(@minutes % 60, 'd2')
                END)
    ELSE 
        FORMAT(@minutes % 60, 'd2')
    END

Если вы используете более раннюю версию, то формат должен быть заменен на:
SELECT RIGHT('00' + CAST(@minutes / 60 AS NVARCHAR(5)), 2)
И то же самое для остальных.

[/РЕДАКТИРОВАТЬ]