我的商店程序中有一个动态查询。当我添加一个条件来检查条件之间的日期是否给了我以下错误:
从字符串转换日期和/或时间时转换失败。
这是我的问题:
@EffDate datetime = GETDATE()
在我的动态查询中:
set @query = @query + ' WHERE ' + @EffDate + ' BETWEEN CONVERT(nvarchar(24), a.Eff_StartDate, 121) AND CONVERT(nvarchar(24), a.Eff_EndDate, 121)';
如何处理这种情况?
答案 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)';