-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)

并且您的代码应该可以正常工作。你必须在它周围加上单引号:

'在哪里 @EffDate = ' + '''' + CAST(@EffDate AS VARCHAR) + '''' + .....

于 2013-03-28T20:49:55.210 回答
0
set @query = @query + ' WHERE  ' + quotename(@EffDate,'''') + ' BETWEEN CONVERT(nvarchar(24), a.Eff_StartDate, 121) AND CONVERT(nvarchar(24), a.Eff_EndDate, 121)';
于 2019-05-10T12:58:43.637 回答