USE the following to determine if there are records in assets
table having purch_date in wrong format (that would be very very strange)

SELECT * FROM assets WHERE ISDATE(purch_date) <> 1

if the above statement returns rows, then there is a problem with data of table.


you could use the following query to retrieve the records,
you are looking for:

select assetno from assets where DATEDIFF(dd, purch_date, dateadd(mm,-@months, @yearend) ) > = 0

HTH