数据的SQL间隔
我正在做一个项目,需要一个时间间隔的数据,例如 我有一个数据是数据的SQL间隔,sql,sql-server,Sql,Sql Server,我正在做一个项目,需要一个时间间隔的数据,例如 我有一个数据是DECLARE@Time datetime='Jan 1 1900 9:54AM'预期结果是1900-01-01 09:30:00,但使用此查询 ALTER FUNCTION [dbo].[RoundTime] (@Time datetime, @RoundTo float) RETURNS datetime AS BEGIN DECLARE @RoundedTime smalldatetime DECLARE @Multiplier
DECLARE@Time datetime='Jan 1 1900 9:54AM'
预期结果是1900-01-01 09:30:00
,但使用此查询
ALTER 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
结束
我得到了这个结果,请告诉我你是怎么做到的。顺便说一句,我正在使用SQL数据库
编辑1:我使用0.5
作为@RoundTo
参数
编辑2:这就是我如何使用函数
,CONVERT(varchar,CONVERT(time,[dbo].[RoundTime](CAST(CAST([INTERVAL]as datetime)as varchar),0.5)),108)作为[INTERVAL]
您的函数被声明为返回一个datetime
。这是日期/时间值的正确内部格式
您可以在较新版本的SQL Server中使用format()
,或类似的内容:
convert(varchar(255), @RoundedTime, 109)
但是。在调用函数后执行此操作。该函数应返回一个datetime
。您的格式只是一种演示格式。alterfunction[dbo].[RoundTime](@Time-datetime)
ALTER FUNCTION [dbo].[RoundTime](@Time datetime)
RETURNS smalldatetime
as
Begin
Declare @RoundedTime smalldatetime
SET @RoundedTime=
(Select
case when datepart(minute,@Time)=0 and datepart(second,@Time)=0 then convert(varchar(10),@Time,121)
when datepart(minute,@Time)>30 and datepart(second,@Time)=0 then dateadd(mi,30,cast(convert(varchar(14),@Time,121)+'00' as datetime))
when datepart(minute,@Time)=30 and datepart(second,@Time)=0 then cast(convert(varchar(16),@Time,121) as datetime)
when datepart(minute,@Time)<30 and datepart(second,@Time)=0 then dateadd(mi,0,cast(convert(varchar(14),@Time,121)+'00' as datetime))
end as 'Date')
return @RoundedTime
end
返回smalldatetime
作为
开始
声明@RoundedTime smalldatetime
设置@RoundedTime=
(选择
当datepart(分钟,@Time)=0和datepart(秒,@Time)=0时,则转换为(varchar(10),@Time,121)
当datepart(分钟,@Time)>30且datepart(秒,@Time)=0时,则dateadd(mi,30,cast(将varchar(14),@Time,121)+00转换为datetime))
当datepart(分钟,@Time)=30,datepart(秒,@Time)=0时,则将(varchar(16),@Time,121)转换为datetime)
当datepart(分钟,@Time)时,我用
DECLARE @RoundedTime smalldatetime
DECLARE @Multiplier float
SET @Multiplier= 24.0/@RoundTo
SET @RoundedTime= DATEADD(mi, DATEDIFF(mi, 0, @Time)/30*30, 0)
RETURN @RoundedTime
@维安·奥杰达·加西亚试试这个,只是想知道@RoundTo float的目的是什么parameter@vian-ojeda garcia,如果您可以共享错误数据的示例,以便我可以更正它…它显示的数据比它应该显示的数据多,因为我也将此函数用于我的查询过滤器let us。