sql >> Databasteknik >  >> RDS >> Sqlserver

Hänvisar till ett kolumnalias i en WHERE-klausul

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

Normalt kan du inte referera till fältalias i WHERE klausul. (Tänk på det som hela SELECT inklusive alias, tillämpas efter WHERE klausul.)

Men, som nämnts i andra svar, kan du tvinga SQL att behandla SELECT ska hanteras före WHERE klausul. Detta görs vanligtvis med parentes för att tvinga fram logisk operationsordning eller med ett gemensamt tabelluttryck (CTE):

Parentes/Underval:

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

Eller se Adams svar för en CTE-version av densamma.



  1. SQL Row_Number()-funktionen i Where-sats

  2. De bästa sätten att öka databaseffektiviteten

  3. Infoga en tidsstämpel i databasen via ContentValues

  4. PL/SQL Stark referensmarkör med användardefinierad postdatatyp