Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

cara yang lebih baik untuk menghasilkan tabel bulan/tahun

Saya lebih suka menggunakan set yang sudah ada, karena itu seringkali jauh lebih efisien daripada CTE rekursif yang mahal. Jika Anda memiliki tabel angka, gunakan itu; jika Anda sudah memiliki tabel kalender, lebih baik lagi; jika tidak, Anda dapat menggunakan objek bawaan seperti 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;

Untuk beberapa latar belakang, lihat:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mengubah data dari baris berdasarkan kolom tertentu ke struktur data lain

  2. sql server 2008 management studio tidak memeriksa sintaks kueri saya

  3. Cara Mengotomatiskan Pengumpulan Data pada Pertumbuhan Database SQL Server

  4. Tidak dapat terhubung ke AWS EC2 dari visual studio (atau di mana pun sebenarnya)

  5. Kesalahan SQL Server 110:Ada lebih sedikit kolom dalam pernyataan INSERT daripada nilai yang ditentukan dalam klausa VALUES.