我在SQL语句中使用DATEDIFF。我正在选择它,我也需要在WHERE子句中使用它。此声明不起作用...
SELECT DATEDIFF(ss, BegTime, EndTime) AS InitialSave
FROM MyTable
WHERE InitialSave <= 10
它给出消息:无效的列名称“InitialSave”
但是这个说法很好用...
SELECT DATEDIFF(ss, BegTime, EndTime) AS InitialSave
FROM MyTable
WHERE DATEDIFF(ss, BegTime, EndTime) <= 10
我里面的程序员说这效率低下(好像我两次调用了该函数)。
有两个问题。为什么第一个陈述不起作用?使用第二条语句执行效率低下吗?
最佳答案
您无法访问where语句中的select语句中定义的列,因为只有在执行where之后才生成它们。
您可以这样做
select InitialSave from
(SELECT DATEDIFF(ss, BegTime, EndTime) AS InitialSave
FROM MyTable) aTable
WHERE InitialSave <= 10
附带说明-从本质上讲,这实际上将DATEDIFF移到了where语句中。在where语句的列上使用函数会导致索引无法有效使用,因此应尽可能避免使用索引,但是,如果必须使用datediff,则必须这样做!
关于tsql - 在T-SQL中使用DATEDIFF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/870204/