Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server sql server 2005将时间转换为分钟_Sql Server_Stored Procedures_Stored Functions - Fatal编程技术网

Sql server sql server 2005将时间转换为分钟

Sql server sql server 2005将时间转换为分钟,sql-server,stored-procedures,stored-functions,Sql Server,Stored Procedures,Stored Functions,我的数据库中有几个日期时间函数,但我需要添加一个,它占用datetime字段的时间部分,然后将时间转换为分钟 我有一个函数,可以获取两次之间的分钟数,而不仅仅是一次的分钟数 ALTER FUNCTION [dbo].[fn_MinutesBetween] ( @fStart datetime, @fEnd datetime ) RETURNS int AS BEGIN RETURN DateDiff(minute, @fStart, @fEnd) 还有一个只占时间的 ALTER

我的数据库中有几个日期时间函数,但我需要添加一个,它占用datetime字段的时间部分,然后将时间转换为分钟

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

 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等


谢谢

获取小时数,转换为整数,乘以60,获取分钟数,转换为整数,将这两个相加

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

按字符串进行铸造是昂贵的()。请尝试以下方法:

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

我在评论中得到了一个链接 并用它来提出一个解决方案

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

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

以下帖子的答案显示了如何计算SQL-SERVER 2005中午夜后的分钟数:我尝试将其转换为我的情况,但结果不准确。事实上,转换成功了,我比较错了。谢谢。发布你的答案,这样我就可以给你信用如果另一个答案准确地解决了你的问题,那么这个问题应该作为一个副本关闭。我必须修改它,所以我会发布答案,以防其他人想知道它没有给出准确的时间,当中午12点以后。我修改了上面评论中提供的链接中的信息,它成功地完成了更新,对您的解决方案进行了投票。