我的数据库中有一些日期时间函数,但我需要添加一个占用日期时间字段的时间部分,然后将时间转换为分钟
我有一个函数可以获得两次之间的分钟,但不仅仅是一次的分钟。
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点就是60点,凌晨2点就是120点 中午12点将是720等。
由于
答案 0 :(得分: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
答案 1 :(得分: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
答案 2 :(得分: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