1

我的数据库中有一些日期时间函数,但我需要添加一个获取日期时间字段的时间部分,然后将时间转换为分钟的函数

我有一个函数可以获取两次之间的分钟数,而不仅仅是一次的分钟数。

 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,等等。

谢谢

4

3 回答 3

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
于 2013-04-12T20:44:28.200 回答
1

获取小时数,转换为 int,乘以 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
于 2013-04-12T20:35:10.683 回答
0

转换为字符串很昂贵(我在这里谈论相反的情况,但概念是相同的)。试试这个:

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
于 2013-04-12T20:41:58.883 回答