SQL Server – Subtracting with GetDate()

sql serversql-server-2016t-sql

I am trying to convert a postgresql query to ms sql query. This is what I have in postgresql
round(cast((Current_Date - emp.hiredate) As Decimal)/365,1)

now I thought it would be a simple conversion and I tried to change it for MS SQL to

round(cast((GetDate() - emp.hiredate) as decimal) / 365, 1)

but in MS SQL Server I get this error

The data types date time and date are incompatible in the subtract operator

Best Answer

So, you are looking for the difference in Years between the two dates, correct? And you want to show one decimal place in the calculation, correct? Then a simple DATEDIFF() will not work for you. Try this instead:

SELECT ROUND(CAST(Datediff(Day, emp.hiredate, GETDATE()) as decimal(9,1))/ 365, 1)

This is also imprecise (because of leap years) but matches what you have now.

EDIT:
You might want to check this logic, as the current ROUND() logic would show a person at 1.0 years when they hit 0.95 years. If you want to wait until they actually have 1.0 years or more to show them at 1.0 years, use this variant: SELECT ROUND(CAST(Datediff(Day, emp.hiredate, GETDATE()) as decimal(9,1))/ 365, 1, 1). This adds a trailing 1 to the current command. That added parameter TRUNCATES at the point specified instead of rounding up, so 0.99' would still show '0.9'