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 をコメントアウトすると、正常に動作します。DB 内の私の日付はたまたま 2012 年 10 月 10 日であり、有効です。IsDate は、無効なものを除外する必要があります。
DB での結果 (最後の行をコメントアウトしたとき)。私は完全に困惑しています。
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())
できます。2 番目のパラメーター (int としてキャスト) を取り出して数値またはゼロに置き換えると、同じエラーが発生します。
私は困惑しています。どんな助けでも大歓迎です!
ああ、AssetMaint.Answer は DB の varchar フィールドです。それについては何もできません。