Минуты в SQL Server - PullRequest
       18

Минуты в SQL Server

2 голосов
/ 31 мая 2010

Я создал функцию для преобразования минут (smallint) во время (varchar(5)), например 58 -> 00: 58.

set QUOTED_IDENTIFIER ON

GO
Create FUNCTION [dbo].[IntToMinutes]
(
    @m smallint
)
RETURNS nvarchar(5)
AS
BEGIN
    DECLARE @c nvarchar(5)
     SET @c = CAST((@m / 60) as varchar(2)) + ':' + CAST((@m % 60) as varchar(2))
     RETURN @c
END

Проблема в том, что время меньше 10 минут, например 9. Результат этой функции - 0: 9. Я хочу, чтобы формат был 00: 09.

Как я могу это сделать?

Ответы [ 4 ]

7 голосов
/ 31 мая 2010
Create FUNCTION [dbo].[IntToMinutes]
(
    @m smallint 
)  
RETURNS nvarchar(5)
AS  
BEGIN
    DECLARE @c datetime
    select @c = dateadd(mi,@m,'00:00')       
    RETURN convert(nvarchar(5), @c, 108)   
END
1 голос
/ 31 мая 2010
declare @m smallint
declare @d varchar(10)

set @m = 9

DECLARE @c nvarchar(5)
SET @c = CAST((@m / 60) as varchar(2)) + ':' + CAST((@m % 60) as varchar(2))
set @d = Convert(varchar,cast(@c as datetime), 108)
set @c = LEFT(@d,5)
select @c

Это работает только для чисел от 0 до 1439, но это нормально для 24 часов.Вы можете пропустить объявление переменной @d и сделать это встроенным.

0 голосов
/ 15 октября 2013
CREATE FUNCTION [dbo].[IntToMinutes]
(
    @m int
)
RETURNS nvarchar(20)
AS  
BEGIN

    DECLARE @c datetime
    DECLARE @c1 datetime
    SELECT @c =dateadd(mi,0,'00:00')              
    select @c1 = dateadd(mi,@m,'00:00')         

     return CONVERT(varchar(10),DATEDIFF(hh, @c, @c1) ) + ':' +
     CONVERT(varchar(10),DATEDIFF(mi,DATEADD(hh,DATEDIFF(hh, @c, @c1),@c),@c1) )
    end
0 голосов
/ 31 мая 2010

Дополните две (под) строки начальными нулями, затем возьмите два самых правых возвращенных символа:

CREATE FUNCTION [dbo].[IntToMinutes] 
( 
    @m smallint  
)   
RETURNS nvarchar(5) 
AS   
BEGIN 
    DECLARE @c nvarchar(5) 

    SET @c = RIGHT('0' + CAST((@m / 60) as varchar(2)), 2)
     + ':'
     + RIGHT('0' + CAST((@m % 60) as varchar(2)), 2)

     RETURN @c 
END

Обратите внимание, конечно, что это не работает так хорошо, как только вы пройдете 5999 минут. Если это проблема, просто сделайте вещи немного больше / длиннее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...