sql >> Databáze >  >> RDS >> Sqlserver

lepší způsob, jak generovat tabulku měsíců/rok

Raději používám sady, které již existují, protože to je často mnohem efektivnější než drahé rekurzivní CTE. Pokud máte tabulku čísel, použijte ji; pokud již máte kalendářovou tabulku, ještě lépe; jinak můžete použít vestavěné objekty jako 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;

Některá pozadí viz:




  1. Vnořte model Nest Json do tabulky SQL

  2. C# Připojování k formátování data a času Oracle DB

  3. 4 funkce pro získání hodiny z časové hodnoty v MariaDB

  4. mysql:výběr, vložení, odstranění a aktualizace v jednom dotazu