tsql – 在T-SQL中使用DATEDIFF

我在sql语句中使用DATEDIFF.我正在选择它,我也需要在WHERE子句中使用它.这句话不起作用……
SELECT DATEDIFF(ss,BegTime,EndTime) AS InitialSave
FROM MyTable
WHERE InitialSave <= 10

它给出了消息:无效的列名“InitialSave”

但这句话很好……

SELECT DATEDIFF(ss,EndTime) AS InitialSave
FROM MyTable
WHERE DATEDIFF(ss,EndTime) <= 10

我的程序员说这是低效的(似乎我在调用函数两次).

所以有两个问题.为什么第一个陈述不起作用?使用第二个语句来执行它是否效率低下?

解决方法

您不能访问where语句中select语句中定义的列,因为它们只有在执行where之后才会生成.

但是你可以这样做

select InitialSave from 
(SELECT DATEDIFF(ss,EndTime) AS InitialSave
FROM MyTable) aTable
WHERE InitialSave <= 10

作为旁注 – 这基本上将DATEDIFF移动到where语句中,就其首次定义的位置而言.在where语句中的列上使用函数会导致索引无法有效使用,如果可能的话应该避免使用,但是如果你必须使用datediff,那么你必须这样做!

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...