将int转换为SmallDateTime

时间:2013-02-14 23:32:13

标签: sql sql-server tsql casting smalldatetime

我想将L.LoanDueDatesmalldatetime)与ufnARCUGetLatestProcessDate()的返回值(这是int)进行比较,看看贷款的天数截止日期是过去的最后一个过程日期。

我收到了

  

将表达式转换为数据类型smalldatetime的算术溢出错误

错误,似乎无法搞清楚。任何帮助都会有用。先感谢您。

CAST(L.LoanDueDate - CAST(CAST((SELECT ProcessDate FROM ufnARCUGetLatestProcessDate()) AS VARCHAR(10)) AS smalldatetime) AS INT)

4 个答案:

答案 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())