1. ホーム
  2. sql

[解決済み】WHERE句でカラム・エイリアスを参照する場合

2022-04-11 14:58:55

質問

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

私は

日差というカラム名が無効です。

Maxlogtmはdatetimeフィールドです。 些細なことでイライラするんですよね。

解決方法は?

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

通常、フィールド・エイリアスは WHERE 節があります。(これは、全体の SELECT の後に、エイリアスも含めて適用されます。 WHERE 節があります)。

しかし、他の回答にもあるように、SQLで強制的に SELECT の前に処理されるように WHERE 節があります。これは通常、論理的な操作順序を強制するための括弧や、共通テーブル式(CTE)を用いて行われる。

括弧/サブセレクト

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

また、CTE版については、Adamの回答を参照してください。