2013-04-12 4 views
1

У меня есть несколько временных функций даты в пределах моей базы данных, но мне нужно добавить тот, который занимает время части поля даты и времени, а затем преобразует время в минутыSQL Server время 2005 новообращенные минут

У меня есть функции, которые получают минуты между двумя моментами, но не только минуты одного времени.

ALTER FUNCTION [dbo].[fn_MinutesBetween] 
(@fStart datetime, @fEnd datetime) 
RETURNS int 
AS 
BEGIN 
RETURN DateDiff(minute, @fStart, @fEnd) 

и еще один, который получает только время часть

ALTER function [dbo].[fn_ReturnTimeOnly] 
(@DateTime smallDateTime) 
returns nvarchar(50) 
as 
begin 
    Return substring(cast(@DateTime as varchar),12,len(@DateTime)) 

end 

Как я могу просто получить минуты времени. Как 1:00 утра будет 60, 2:00 утра будет 120 12:00 вечера будет 720 и т.д.

Благодаря

+0

Следующая запись есть ответы, которые показывают, как вычислить ** Протокол С полуночи ** в 'SQL-SERVER 2005': http://stackoverflow.com/questions/4536330/datetime-to-totalminute-in -sql –

+0

Я попытался преобразовать его в свою ситуацию, но результаты не точны. –

+0

На самом деле преобразование действительно работало, я сравнивал это неправильно. Отправьте свой ответ, чтобы я мог дать вам кредит –

ответ

1

Получить количество часов, литая в целое, умножаем на 60, получаем количество минут, отбрасываемых в int, добавьте эти два.

ALTER function [dbo].[fn_ReturnMinutesOnly] 
(@DateTime smallDateTime) 
returns INT 
as 
begin 
     Return 
      cast(substring(cast(@DateTime as varchar),13,2) as INT) * 60 + 
      cast(substring(cast(@DateTime as varchar),16,2) as INT) 
end 
+0

Это не дает точное время, когда после 12 часов. Я изменил информацию из ссылки, приведенной в комментариях выше, и это сработало –

+0

Спасибо за обновление, поддержали ваше решение. –

0

Отливка отличная (I talk about the opposite scenario here, but the concept is the same). Попробуйте вместо этого:

DECLARE @DateTime DATETIME; 
SET @DateTime = GETDATE(); 

SELECT DATEDIFF(MINUTE, DATEDIFF(DAY, 0, @DateTime), @DateTime); 

В функции, это было бы:

ALTER function [dbo].[fn_ReturnTimeOnly] 
(@DateTime smallDateTime) 
returns INT 
as 
begin 
    Return (SELECT DATEDIFF(MINUTE, DATEDIFF(DAY, 0, @DateTime), @DateTime)); 
end 
2

мне дали ссылку в комментариях к datetime to totalminute и использовал это, чтобы придумать решение.

ALTER FUNCTION [dbo].[fn_ReturnMinutesOnly] 
    (@dt smalldatetime) 

RETURNS int 
AS 
BEGIN 
    RETURN DATEDIFF(MINUTE, DATEADD(DAY, DATEDIFF(DAY, 0, @dt), 0), @dt) 
END