I am using DATEDIFF in an SQL statement. I am selecting it, and I need to use it in WHERE clause as well. This statement does not work…
SELECT DATEDIFF(ss, BegTime, EndTime) AS InitialSave
FROM MyTable
WHERE InitialSave <= 10
It gives the message: Invalid column name “InitialSave”
But this statement works fine…
SELECT DATEDIFF(ss, BegTime, EndTime) AS InitialSave
FROM MyTable
WHERE DATEDIFF(ss, BegTime, EndTime) <= 10
The programmer in me says that this is inefficient (seems like I am calling the function twice).
So two questions. Why doesn’t the first statement work? Is it inefficient to do it using the second statement?
You can’t access columns defined in the select statement in the where statement, because they’re not generated until after the where has executed.
You can do this however
As a sidenote – this essentially moves the DATEDIFF into the where statement in terms of where it’s first defined. Using functions on columns in where statements causes indexes to not be used as efficiently and should be avoided if possible, however if you’ve got to use datediff then you’ve got to do it!