我想将L.LoanDueDate
(smalldatetime
)与ufnARCUGetLatestProcessDate()
的返回值(这是int
)进行比较,看看贷款的天数截止日期是过去的最后一个过程日期。
我收到了
将表达式转换为数据类型smalldatetime的算术溢出错误
错误,似乎无法搞清楚。任何帮助都会有用。先感谢您。
CAST(L.LoanDueDate - CAST(CAST((SELECT ProcessDate FROM ufnARCUGetLatestProcessDate()) AS VARCHAR(10)) AS smalldatetime) AS INT)
答案 0 :(得分:0)
您无法将int与smalldatetime进行比较。您需要比较两个日期,因此您必须使用datediff。
答案 1 :(得分:0)
您可以将日期列强制转换为int。它会给你一个近似(圆整)日期,没有时间部分,作为一个整数。
修改强>
这将为您提供日期作为数字供您比较:
SELECT FLOOR(CAST(L.LoanDueDate as float)) -
(SELECT ProcessDate FROM ufnARCUGetLatestProcessDate()) AS myValue
FROM ...
关键是将日期转换为数字,而不是迄今为止的数字。
答案 2 :(得分:0)
我能够找出问题所在。 DigCamare对DATEDIFF的评论提醒我,即使您可以将int转换为smalldatetime,我也需要这样做,以便您可以比较它。
DATEDIFF(d,L.LoanDueDate,CONVERT(smalldatetime,convert(varchar(10),(SELECT ProcessDate FROM ufnARCUGetLatestProcessDate()))))
答案 3 :(得分:0)
只想添加以下内容。这就是我用来做一个简单的int到smalldatetime转换的方法。希望它能帮助其他人。
(SELECT CAST(CAST(ProcessDate AS VARCHAR(10)) AS SMALLDATETIME) FROM ufnARCUGetLatestProcessDate())