简体   繁体   English

将hh:mm:ss值以varchar形式四舍五入到最接近的5分钟

[英]Rounding up/down to the nearest 5 minutes where hh:mm:ss value is in varchar form

I have a database which one column has a hr:min:sec value like "14:04:33" as varchar (50). 我有一个数据库,其中一列具有hr:min:sec值,例如“ 14:04:33”作为varchar(50)。 I want to round up/down to the nearest 5 min: 14:05:00 and 14:00:00 respectively and both of them needs to be varchar(50). 我想向上/向下舍入到最接近的5分钟:分别是14:05:00和14:00:00,它们两个都必须是varchar(50)。 I tried to round up by converting them to datetime and the code I used to round down to the nearest 5 min was: 我试图通过将它们转换为日期时间进行舍入,并且我舍入到最接近的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))

however the final output is Jan 1 1900 2:00 PM 但是最终输出是1900年1月1日2:00 PM

and the code I used to round up to the nearest 5 min was: 我用来四舍五入到最接近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))

And the final output is Jan 1 1900 2:05 PM. 最终输出是1900年1月1日下午2:05。 I am looking for a suitable function for conversion in sql server 2012 . 我正在寻找适合在sql server 2012中进行转换的函数。

try this: 尝试这个:

Floor Value -- 底价-

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 Value -- 细胞价值-

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

If you're on SQL 2012, you can use the new date & time functions. 如果您使用的是SQL 2012,则可以使用新的日期和时间函数。 This way will round down to the nearest 5 minutes: 这种方法将舍入到最近的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 http://msdn.microsoft.com/en-us/library/ms186724.aspx

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM