0

I am trying to compare L.LoanDueDate (which is a smalldatetime) to the return value of ufnARCUGetLatestProcessDate() (which is an int) to see how many days the loan due date is past the last process date.

I receive an

Arithmetic overflow error converting expression to data type smalldatetime

error and can't seem to figure it out. Any help would be useful. Thank you in advance.

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

4 回答 4

0

You can't compare an int to a smalldatetime. You need to compare two dates and for that you'd have to use datediff.

于 2013-02-14T23:48:45.867 回答
0

You can cast the date column to int. It will give you the aproximate (rounded) date, without the time part, as an int.

Edit:

This will give you the date as a number for you to compare:

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

The key is to cast the date to number and not the number to date.

于 2013-02-14T23:54:06.070 回答
0

I was able to figure out the issue. DigCamare's comment on DATEDIFF reminded me that is what I needed to do even though you can cast a int to a smalldatetime so you can compare it.

DATEDIFF(d,L.LoanDueDate,CONVERT(smalldatetime,convert(varchar(10),(SELECT ProcessDate FROM ufnARCUGetLatestProcessDate()))))
于 2013-02-15T00:01:57.777 回答
0

Just wanted to add the following. This is what I am using to do a simple int to smalldatetime conversion. Hope it helps other people.

(SELECT CAST(CAST(ProcessDate AS VARCHAR(10)) AS SMALLDATETIME) FROM ufnARCUGetLatestProcessDate()) 
于 2013-05-23T15:05:01.163 回答