SQL 服务器:将字符串 'n'、'hh'、'd' 转换为全局变量 n、hh 和 d

SQL Server: convert string 'n', 'hh', 'd' to global variables n, hh and d

我们正在使用一个非常高级的框架,称为 Instant Developer,其中日期部分作为字符串实现。实现一个接口,我将 SQL Server 中的函数 DATEADD (datepart , number , date ) 添加到我项目的库中。但是当我调用它时,生成的代码是,例如

SELECT dateadd('n',90,CONVERT(datetime, DATEREQUEST+TIMEREQUEST))
FROM [Ergo].[dbo].[MANUTENZIONI]
where TICKETMANUTE = 17723

但 SQL 服务器出现 ax 异常,因为 dateadd() 函数的第一个参数不正确,因为它不应该是字符串而是全局变量。有没有办法转换它?类似于:

dateadd(case when 'n'='n' then n end, 90, CONVERT(datetime, DATEREQUEST+TIMEREQUEST))

创建一个接受 varchar 作为间隔类型的包装函数

create function myDateadd(@type varchar(5), @amount int, @dt datetime)
returns datetime
as
begin
return case @type
       when 'n' then dateadd(n, @amount, @dt)
       when 'd' then dateadd(d, @amount, @dt)
       -- ...
       end;
end
go

select dbo.myDateadd('n',60,getdate());