我需要编写一个函数,在一个列中舍入时间以从其原始时间开始(例如:23:33:00.0000000 将是 23:00)并在另一列中舍入到下一个小时(例如:23:33 :00.0000000 将是 24:00),然后将这些新值插入到新列中。我在 Stack Overflow 上的How to Round a Time in T-SQL 中找到了这个函数,但我无法运行该函数。我不断收到此错误消息:'Msg 156,Level 15,State 1,Procedure RoundTime,Line 11 关键字'SELECT'附近的语法不正确。'
CREATE FUNCTION [dbo].[RoundTime] (@Time datetime, @RoundTo float)
RETURNS datetime
AS
BEGIN
DECLARE @RoundedTime smalldatetime
DECLARE @Multiplier float
SET @Multiplier= 24.0/@RoundTo
SET @RoundedTime= ROUND(CAST(CAST(CONVERT(varchar,@Time,121) AS datetime) AS float) * @Multiplier,0)/@Multiplier
RETURN @RoundedTime
END
SELECT [dbo].[RoundTime] ('23:33',0.0)
我也试过用 SELECT dbo.roundtime('23:33',0.0) 运行它,但仍然没有乐趣。
因此,我希望通过运行此功能来尝试弄清楚如何缩短时间,但我什至无法运行它。而且我不知道如何让时间回到最早的时间点。我是否只需要从时间戳中提取小时,然后将该小时插入到它的新列中?或者有没有办法即时转换它然后将其插入新列?我正在使用 Sql Server 2008。