2016-12-27 16 views
1

私たちは、インスタントデベロッパーと呼ばれる非常に高いレベルのフレームワークを使用しています。インターフェイスを実装して、私は私のプロジェクトのライブラリに関数DATEADD (datepart , number , date)をSQL Serverから追加しました。私はそれを呼び出すときには、生成されたコードは、例えば、あるSQL Server:文字列 'n'、 'hh'、 'd'をグローバル変数n、hh、dに変換

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

が、文字列ではなく、グローバル変数ことになっていないので、dateadd()関数の最初のパラメータが間違っているので、SQL Serverは斧の例外を上昇します。それを変換する方法はありますか?

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

の種類としてはvarcharを受け入れるラッパー関数を作成しますような何か'? – Backs

+0

ラッパー関数 'dateadd_N(int、datetime)'、 'dateadd_D(int、datetime)'、... – Serg

+0

を作成するための回避策として、文字列として。だからMinutesが 'n'に変換された 'dateAdd(Minutes、90、date) 'と呼んだ場合... –

答えて

2

あなたは((日時、DATEREQUEST + TIMEREQUEST)CONVERT、nは90を) `DATEADDを生成することができない理由間隔

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()); 
関連する問題