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

cách tốt hơn để tạo bảng tháng / năm

Tôi thích sử dụng các tập hợp đã tồn tại, vì điều đó thường hiệu quả hơn nhiều so với các CTE đệ quy đắt tiền. Nếu bạn có một bảng số, hãy sử dụng nó; nếu bạn đã có một bảng lịch, thậm chí còn tốt hơn; nếu không, bạn có thể sử dụng các đối tượng tích hợp sẵn như master.dbo.spt_values :

DECLARE @FromDate DATETIME, @ToDate DATETIME;
SET @FromDate = '2012-01-01';
SET @ToDate = '2012-12-31';

-- all days in that period
SELECT TOP (DATEDIFF(DAY, @FromDate, @ToDate)+1) 
  TheDate = DATEADD(DAY, number, @FromDate)
  FROM [master].dbo.spt_values 
  WHERE [type] = N'P' ORDER BY number;

-- just the months in that period
SELECT TOP (DATEDIFF(MONTH, @FromDate, @ToDate)+1) 
  TheDate  = DATEADD(MONTH, number, @FromDate),
  TheMonth = MONTH(DATEADD(MONTH, number, @FromDate)),
  TheYear  = YEAR(DATEADD(MONTH, number, @FromDate))
  FROM [master].dbo.spt_values 
  WHERE [type] = N'P' ORDER BY number;

Để biết một số thông tin cơ bản, hãy xem:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Vấn đề về quyền trong SSMS:Quyền SELECT bị từ chối trên đối tượng 'expand_properties', cơ sở dữ liệu 'mssqlsystem_resource', ... Lỗi 229)

  2. Cột văn bản không lưu trữ nhiều hơn 8000 ký tự

  3. Chuyển đổi không thành công khi chuyển đổi giá trị varchar 'simple' thành kiểu dữ liệu int

  4. EXP () Ví dụ trong SQL Server

  5. DECRYPTBYASYMKEY () Không trả lại giá trị mong đợi