Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Odniesienie do aliasu kolumny w klauzuli WHERE

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

Zwykle nie możesz odwoływać się do aliasów pól w WHERE klauzula. (Pomyśl o tym jako o całym SELECT łącznie z aliasami, jest stosowany po WHERE klauzula.)

Ale, jak wspomniano w innych odpowiedziach, możesz zmusić SQL do traktowania SELECT do obsługi przed WHERE klauzula. Odbywa się to zwykle za pomocą nawiasów, aby wymusić logiczną kolejność operacji lub za pomocą wspólnego wyrażenia tabeli (CTE):

Nawiasy/podwybór:

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

Lub zobacz odpowiedź Adama na wersję CTE tego samego.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SYSDATETIME() Przykłady w SQL Server (T-SQL)

  2. Co to jest domyślne ograniczenie w programie SQL Server — samouczek dotyczący programu SQL Server / TSQL — część 90

  3. CAST i IsNumeric

  4. Pobierz dzień roku z daty w SQL Server (T-SQL)

  5. Nazwa kolumny lub liczba podanych wartości nie zgadza się z definicją tabeli