将int强制转换为SmallDateTime



我正在尝试将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()) 

最新更新