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 格式
如何在 MS Access 2007 或 MS SQL Server 2005 中通过 SQL 将字段转换为行
将 char 数据类型转换为 datetime 数据类型导致 SQL Server 2005 中的 datetime 值超出范围