我正在尝试将L.LoanDueDate
(它是smalldatetime
)与ufnARCUGetLatestProcessDate()
(它是一个int
)的返回值进行比较,以查看贷款到期日比最后一个处理日期晚了多少天。
我收到
将表达式转换为数据类型smalldatetime 时出现算术溢出错误
错误,似乎无法解决。任何帮助都是有用的。提前谢谢。
CAST(L.LoanDueDate - CAST(CAST((SELECT ProcessDate FROM ufnARCUGetLatestProcessDate()) AS VARCHAR(10)) AS smalldatetime) AS INT)
不能将int与smalldatetime进行比较。你需要比较两个日期,为此你必须使用datediff。
我能够解决这个问题。DigCamare对DATEDIFF的评论提醒我,这就是我需要做的,即使你可以将int转换为smalldatetime,这样你就可以进行比较。
DATEDIFF(d,L.LoanDueDate,CONVERT(smalldatetime,convert(varchar(10),(SELECT ProcessDate FROM ufnARCUGetLatestProcessDate()))))
您可以将日期列强制转换为int。它会将不包含时间部分的近似(四舍五入)日期作为int。
编辑:
这将给你日期作为一个数字供你比较:
SELECT FLOOR(CAST(L.LoanDueDate as float)) -
(SELECT ProcessDate FROM ufnARCUGetLatestProcessDate()) AS myValue
FROM ...
关键是要将日期转换为数字,而不是将数字转换为日期。
只是想添加以下内容。这就是我用来进行简单的int到smalldatetime转换的方法。希望它能帮助其他人。
(SELECT CAST(CAST(ProcessDate AS VARCHAR(10)) AS SMALLDATETIME) FROM ufnARCUGetLatestProcessDate())