0

我有一个数据库,其中一列的 hr:min:sec 值如“14:04:33”作为 varchar (50)。我想向上/向下舍入到最接近的 5 分钟:分别为 14:05:00 和 14:00:00,并且它们都需要是 varchar(50)。我试图通过将它们转换为日期时间来进行四舍五入,我用来四舍五入到最接近 5 分钟的代码是:

DECLARE @Time varchar (50)
SELECT @Time ='14:04:33'
SELECT CAST(CONVERT(datetime,(FLOOR(CAST(CONVERT(datetime,@Time,108)As float )*288)/288), 108)AS varchar (50))

但是最终输出是 Jan 1 1900 2:00 PM

我用来四舍五入到最接近 5 分钟的代码是:

DECLARE @Time varchar (50)
SELECT @Time ='14:04:33'
SELECT CAST(CONVERT(datetime,(CEILING(CAST(CONVERT(datetime,@Time,108)As float)*288)/288), 108) AS varchar(50))

最终输出是 Jan 1 1900 2:05 PM。我正在寻找适合在sql server 2012中进行转换的函数。

4

2 回答 2

2

尝试这个:

底价 --

DECLARE @Time varchar (50)
SELECT @Time ='14:04:33'
SELECT CONVERT(time,CONVERT(varchar(2),DATEPART(HH,@Time))+':'+CONVERT(varchar(2),(DATEPART(MI,@Time)-DATEPART(MI,@Time)%5))+':00')

上限值 --

DECLARE @Time varchar (50)
SELECT @Time ='14:04:33'
SELECT DATEADD(MI,5,CONVERT(time,CONVERT(varchar(2),DATEPART(HH,@Time))+':'+CONVERT(varchar(2),(DATEPART(MI,@Time)-DATEPART(MI,@Time)%5))+':00'))
于 2013-05-24T07:03:10.380 回答
0

如果您使用的是 SQL 2012,则可以使用新的日期和时间函数。这种方式将向下舍入到最接近的 5 分钟:

DECLARE @When VARCHAR(50) = '14:22:33'
DECLARE @Time TIME = CAST(@When AS TIME)

SELECT TIMEFROMPARTS
(
    DATEPART(HOUR, @Time), --Hour
    DATEPART(MINUTE, @Time) / 5 * 5, --Minute
    0, --Second
    0, --Fraction
    0 --Precision
)

http://msdn.microsoft.com/en-us/library/ms186724.aspx

于 2013-05-24T14:59:43.543 回答