SELECT Asset.AssetID, AnsMaint.Answer, Convert(datetime, AnsMaint.Answer) as maintasdate
FROM Asset INNER JOIN
AssetAnswer AnsMaint ON AnsMaint.AssetID = Asset.AssetID INNER JOIN
AssetField FldMaint ON FldMaint.AssetFieldID = AnsMaint.AssetFieldID
WHERE FldMaint.FieldText = 'Maint. Agreement Term'
AND ISDATE(AnsMaint.Answer) = 1
AND Convert(datetime, AnsMaint.Answer) < DateAdd(d, 145, GetDate())
我在 AND 的最后一部分得到错误。如果我将 AND 注释掉,它可以正常工作。我在数据库中的日期恰好是 10/10/2012 并且有效。IsDate 应该清除任何无效的内容。
在数据库中的结果(当我注释掉最后一行时)。我完全被难住了。
106 10/10/2012 2012-10-10 00:00:00.000
115 10/10/2012 2012-10-10 00:00:00.000
更多有趣的花絮。如果我将最后的 AND 行更改为
AND DateAdd(d, cast(Asset.MaintenanceFreq as int), Convert(datetime, AnsMaint.Answer)) < DateAdd(d, 45, GetDate())
有用。如果我取出第二个参数(转换为 int)并将其替换为数字或零,它会给我同样的错误。
我难住了。任何帮助将不胜感激!
哦,AssetMaint.Answer 是数据库中的一个 varchar 字段,对此我无能为力。