2016-12-27 49 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()); 
相關問題