动态sql查询与条件之间的日期检查?

时间:2013-03-28 20:46:34

标签: sql

我的商店程序中有一个动态查询。当我添加一个条件来检查条件之间的日期是否给了我以下错误:

从字符串转换日期和/或时间时转换失败。

这是我的问题:

@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 个答案:

答案 0 :(得分: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)';

答案 1 :(得分: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)';

答案 2 :(得分:0)

如果@EffDate不总是GETDATE(),你可以使用CAST:

CAST(@EffDate AS VARCHAR)

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

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

答案 3 :(得分:0)

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