Lyn*_*ynn 1 sql t-sql datetime sql-server-2008
我需要编写一个函数,在一列中将时间四舍五入到原始小时(例如:23:33:00.0000000将是23:00),另一列中的时间将向下舍入到下一个小时(例如:23:33) :00.0000000将是24:00)然后将这些新值插入新列.我在T-SQL中如何使用时间的 Stack Overflow上找到了这个函数,但我无法运行该函数.我不断收到此错误消息:'消息156,级别15,状态1,过程RoundTime,第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)
Run Code Online (Sandbox Code Playgroud)
我也试过用SELECT dbo.roundtime('23:33',0.0)运行它,但仍然没有快乐.
所以我希望通过让这个函数运行来弄清楚如何缩短时间,但我甚至无法运行它.而且我不知道最好的方法是让小时回到最早的时刻.我是否只需要从时间戳中提取小时,然后将该小时插入新列中?或者有没有办法在运行中转换它,然后将其插入新列?我正在使用Sql Server 2008.
该函数必须存在才能引用它.在函数声明后添加一个GO,将创建与用法分开.
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
GO
SELECT [dbo].[RoundTime] ('23:33',0.0)
Run Code Online (Sandbox Code Playgroud)