sql >> Database >  >> RDS >> Sqlserver

Verwijzen naar een kolomalias in een WHERE-clausule

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

Normaal gesproken kunt u niet verwijzen naar veldaliassen in de WHERE clausule. (Zie het als de hele SELECT inclusief aliassen, wordt toegepast na de WHERE clausule.)

Maar, zoals vermeld in andere antwoorden, kunt u SQL dwingen om SELECT . te behandelen te behandelen vóór de WHERE clausule. Dit wordt meestal gedaan met haakjes om de logische volgorde van bewerking af te dwingen of met een Common Table Expression (CTE):

Haakjes/Subselect:

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

Of bekijk Adams antwoord voor een CTE-versie van hetzelfde.



  1. MySQL ASIN() Functie – Retourneer de boogsinus van een getal

  2. oracle plsql:hoe XML te parseren en in tabel in te voegen

  3. Belang van transactielogboek in SQL Server

  4. Hoe u JSON-geformatteerde queryresultaten kunt verfraaien in SQLcl (Oracle)