2016-12-27 48 views
1

我们使用称为Instant Developer的非常高级的框架,其中Date部件以字符串形式实现。实现一个接口,我在我的项目库中添加了来自SQL Server的函数DATEADD (datepart , number , date)。但是,当我把它称为,生成的代码,例如,SQL Server:将字符串'n','hh','d'转换为全局变量n,hh和d

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

但SQL Server上升斧异常,因为dateadd()函数的第一个参数不正确,因为它不应该是一个字符串,但一个全局变量。有没有办法转换它?类似:

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

为什么你不能产生'DATEADD包装函数(N,90,CONVERT(日期时间,DATEREQUEST + TIMEREQUEST)) '? – Backs

+0

作为一个解决方法创建包装函数'dateadd_N(int,datetime)','dateadd_D(int,datetime)',... – Serg

+0

因为我的框架不会让我......正如我写的,日期部分实现作为字符串。因此,如果我将'MinAdd'(分钟,90,日期)称为'分钟'被翻译成'n'... –

回答

2

创建它接受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()); 
相关问题