-1

ストア プロシージャに動的クエリがあります。条件の間に日付があるかどうかを確認する条件を追加すると、次のエラーが発生します。

文字列から日時を変換する際に変換に失敗しました。

これが私のクエリです:

@EffDate datetime = GETDATE()

私の動的クエリ内:

set @query = @query + ' WHERE  ' + @EffDate + ' BETWEEN CONVERT(nvarchar(24), a.Eff_StartDate, 121) AND CONVERT(nvarchar(24), a.Eff_EndDate, 121)';

この状態をどのように処理しますか?

4

4 に答える 4

3

文字列に DateTime を連結しているため、最初に文字列に変換する必要があります。

set @query = @query 
  + ' WHERE  ''' 
  + CONVERT(nvarchar(24),@EffDate, 121) 
  + ''' BETWEEN CONVERT(nvarchar(24), a.Eff_StartDate, 121) AND CONVERT(nvarchar(24), a.Eff_EndDate, 121)';
于 2013-03-28T20:48:54.100 に答える
1

生成された @query 値は次のようになります (例):

WHERE 2008-01-01 00:00:00.000 BETWEEN ...

クエリ内で @EffDate を引用符で囲む必要があります。

set @query = @query + ' WHERE  ''' + CONVERT(nvarchar(24), @EffDate,121) + ''' BETWEEN CONVERT(nvarchar(24), a.Eff_StartDate, 121) AND CONVERT(nvarchar(24), a.Eff_EndDate, 121)';
于 2013-03-28T20:52:07.310 に答える
0

@EffDate が常に GETDATE() ではない場合は、CAST を使用できます。

CAST(@EffDate AS VARCHAR)

あなたのコードは正常に動作するはずです。一重引用符で囲む必要があります。

'WHERE @EffDate = ' + '''' + CAST(@EffDate AS VARCHAR) + '''' + .....

于 2013-03-28T20:49:55.210 に答える