小编典典

在WHERE子句中引用列别名

sql

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

我懂了

“无效的列名daysdiff”。

Maxlogtm是日期时间字段。是让我发疯的小东西。


阅读 204

收藏
2021-05-05

共1个答案

小编典典

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

通常,您不能在WHERE子句中引用字段别名。(将其视为SELECT包括别名在内的全部内容,在该WHERE子句之后应用。)

但是,如其他答案所述,您可以强制将SQL视为SELECTWHERE子句之前进行处理。通常使用圆括号来强制操作的逻辑顺序,或者使用通用表表达式(CTE)来完成此操作:

括号/子选择:

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

或参阅亚当的CTE版本答案。

2021-05-05