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

t-sql pilih dapatkan semua Bulan dalam rentang tahun

Astaga... menggunakan "menghitung CTE rekursif" atau "rCTE" sama buruk atau lebih buruk daripada menggunakan loop. Silakan lihat artikel berikut mengapa saya mengatakan itu.

http://www.sqlservercentral.com/articles/T-SQL/74118/

Inilah salah satu cara untuk melakukannya tanpa RBAR termasuk "RBAR tersembunyi" dari rCTE penghitungan.

--===== Declare and preset some obviously named variables
DECLARE @StartDate DATETIME,
        @EndDate   DATETIME
;
 SELECT @StartDate = '2010-01-14', --We'll get the month for both of these 
        @EndDate   = '2020-12-05'  --dates and everything in between
;
WITH
cteDates AS
(--==== Creates a "Tally Table" structure for months to add to start date
     -- calulated by the difference in months between the start and end date.
     -- Then adds those numbers to the start of the month of the start date.
 SELECT TOP (DATEDIFF(mm,@StartDate,@EndDate) + 1)
        MonthDate = DATEADD(mm,DATEDIFF(mm,0,@StartDate) 
                  + (ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) -1),0)
   FROM sys.all_columns ac1
  CROSS JOIN sys.all_columns ac2
)
--===== Slice each "whole month" date into the desired display values.
 SELECT [Year]  = YEAR(MonthDate),
        [Month] = MONTH(MonthDate) 
   FROM cteDates
;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Masukkan Data di SQL Server 2017

  2. Mengapa menggunakan klausa INCLUDE saat membuat indeks?

  3. Setara terbaik untuk IsInteger di SQL Server

  4. Fitur Baru di SQL Server 2017 (Mesin Database)

  5. Hapus Identitas dari kolom dalam tabel