2013-02-14 74 views
0

我想比较L.LoanDueDate(这是一个smalldatetime)至ufnARCUGetLatestProcessDate()返回值(这是一个int),看看贷款到期日期是过去的最后一道工序日期还有多少天。演员INT为smalldatetime

我接收

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

误差和似乎无法弄明白。任何帮助都会有用。先谢谢你。

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

我也曾尝试使用以下。 CAST(L.LoanDueDate-CONVERT(smalldatetime,convert(char(8),(SELECT ProcessDate FROM ufnARCUGetLatestProcessDate())))AS INT) – JoBaxter 2013-02-14 23:50:40

回答

0

我能找出问题。 DigCamare对DATEDIFF的评论提醒我,即使您可以将int转换为smalldatetime,以便您可以进行比较,也是我需要做的。

DATEDIFF(d,L.LoanDueDate,CONVERT(smalldatetime,convert(varchar(10),(SELECT ProcessDate FROM ufnARCUGetLatestProcessDate())))) 
0

您无法将int与smalldatetime进行比较。您需要比较两个日期,因此您必须使用datediff

0

,就可以把日期栏为int。它会给你一个不含时间部分的aproximate(四舍五入)日期作为int。

编辑:

这会给你日期为数字给你作比较:

SELECT FLOOR(CAST(L.LoanDueDate as float)) - 
(SELECT ProcessDate FROM ufnARCUGetLatestProcessDate()) AS myValue 
FROM ... 

关键是要日数转换为数量,而不是最新的。

+0

这就是为什么我试图将其转换为char,然后获取小日期值从那。我需要的只是日期,没有时间。 – JoBaxter 2013-02-14 23:55:31

+0

看看我的编辑。 – rcdmk 2013-02-15 00:13:38

0

只是想添加以下内容。这是我用来做一个简单的int到smalldatetime转换。希望它可以帮助其他人。

(SELECT CAST(CAST(ProcessDate AS VARCHAR(10)) AS SMALLDATETIME) FROM ufnARCUGetLatestProcessDate())