我有一个数据库,其中一列的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 中寻找合适的转换功能。
答案 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
)