向上/向下舍入到最接近的5分钟,其中hh:mm:ss值为varchar形式

时间:2013-05-24 06:46:02

标签: sql sql-server sql-server-2008 sql-server-2012

我有一个数据库,其中一列的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))

然而最终输出是1900年1月1日下午2:00

我用来近似最近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))

最终输出是1900年1月1日下午2:05。我在 sql server 2012 中寻找合适的转换功能。

2 个答案:

答案 0 :(得分:1)

试试这个:

底价 -

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')

Ceil值 -

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'))

答案 1 :(得分: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