Question

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)
Was it helpful?

Solution 2

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

OTHER TIPS

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

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.

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()) 
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top