在 WHERE 子句中引用列别名 [英] Referring to a Column Alias in a WHERE Clause

查看:32
本文介绍了在 WHERE 子句中引用列别名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

SELECT logcount, logUserID, maxlogtm
   , DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
WHERE daysdiff > 120

我明白

无效的列名 daysdiff".

"invalid column name daysdiff".

Maxlogtm 是一个日期时间字段.这是让我发疯的小事.

Maxlogtm is a datetime field. It's the little stuff that drives me crazy.

推荐答案

SELECT
   logcount, logUserID, maxlogtm,
   DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
WHERE ( DATEDIFF(day, maxlogtm, GETDATE() > 120)

通常您不能在 WHERE 子句中引用字段别名.(可以将其视为包括别名在内的整个 SELECT 应用在 WHERE 子句之后.)

Normally you can't refer to field aliases in the WHERE clause. (Think of it as the entire SELECT including aliases, is applied after the WHERE clause.)

但是,正如其他答案中提到的,您可以强制 SQL 在 WHERE 子句之前处理要处理的 SELECT.这通常使用括号来强制操作的逻辑顺序或使用公共表表达式 (CTE):

But, as mentioned in other answers, you can force SQL to treat SELECT to be handled before the WHERE clause. This is usually done with parenthesis to force logical order of operation or with a Common Table Expression (CTE):

括号/子选择:

SELECT
   *
FROM
(
   SELECT
      logcount, logUserID, maxlogtm,
      DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
   FROM statslogsummary   
) as innerTable
WHERE daysdiff > 120

或者查看 Adam 对 CTE 版本的回答.

Or see Adam's answer for a CTE version of the same.

这篇关于在 WHERE 子句中引用列别名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆