sql server 2005将时间转换为分钟[重复]

Posted

技术标签:

【中文标题】sql server 2005将时间转换为分钟[重复]【英文标题】:sql server 2005 convert time to minutes [duplicate] 【发布时间】:2013-04-12 20:21:57 【问题描述】:

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

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

 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 pm 将是 720 等。

谢谢

【问题讨论】:

以下帖子的答案显示了如何在SQL-SERVER 2005:***.com/questions/4536330/… 中计算 自午夜以来的分钟数 我尝试将其转换为我的情况,但结果不准确 实际上转换确实有效,我比较错了谢谢。发布您的答案,以便我给您信用 如果其他答案准确地解决了您的问题,那么这个问题应该作为重复关闭。 我不得不修改它,所以我会发布回答,以防万一其他人想知道 【参考方案1】:

我在 cmets 中获得了指向 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

【讨论】:

【参考方案2】:

获取小时数,转换为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

【讨论】:

中午12点以后没有给出准确的时间。我修改了上面 cmets 中提供的链接中的信息,它起作用了 感谢您的更新,支持您的解决方案。【参考方案3】:

转换为字符串很昂贵 (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

【讨论】:

以上是关于sql server 2005将时间转换为分钟[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C# 将 DateTime 转换为 Sql Server 2005 格式

将 XML 转换为表 SQL Server 2005

如何在 MS Access 2007 或 MS SQL Server 2005 中通过 SQL 将字段转换为行

将 char 数据类型转换为 datetime 数据类型导致 SQL Server 2005 中的 datetime 值超出范围

SQL Server 2005:将 varchar 值“1.23E-4”转换为十进制失败

从 SQL Server 2005 中的用户定义函数中“捕获”错误