Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Позоваване на псевдоним на колона в клауза WHERE

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 версия на същото.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. NEWID() срещу NEWSEQUENTIALID() в SQL Server:Каква е разликата?

  2. Намерете колоната за разделяне за разделена таблица в SQL Server (T-SQL)

  3. SQL Server 2008:как да дам привилегии на потребителско име?

  4. Как да извадите нулеви DateTime от базата данни

  5. Записване на ВСИЧКИ заявки в база данни на SQL Server 2008 Express?