Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tham chiếu đến Bí danh cột trong Mệnh đề WHERE

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

Thông thường, bạn không thể tham chiếu đến bí danh trường trong WHERE mệnh đề. (Hãy coi nó như toàn bộ SELECT bao gồm cả bí danh, được áp dụng sau WHERE mệnh đề.)

Tuy nhiên, như đã đề cập trong các câu trả lời khác, bạn có thể buộc SQL xử lý SELECT được xử lý trước WHERE mệnh đề. Điều này thường được thực hiện với dấu ngoặc đơn để buộc thứ tự hoạt động logic hoặc với Biểu thức bảng chung (CTE):

Dấu ngoặc đơn / Chọn con:

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

Hoặc xem câu trả lời của Adam cho một phiên bản CTE tương tự.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cơ sở dữ liệu đính kèm chỉ đọc

  2. Phát triển máy ảo Azure để sử dụng máy chủ SQL

  3. Kết nối Delphi trên Linux với SQL Server

  4. Sao chép bảng vào cơ sở dữ liệu khác trên SQL Server khác

  5. Ngày xử lý trong SQL Server