Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

по-добър начин за генериране на таблица месеци/години

Предпочитам да използвам набори, които вече съществуват, тъй като това често е много по-ефективно от скъпите рекурсивни CTE. Ако имате таблица с числа, използвайте я; ако вече имате календарна таблица, още по-добре; в противен случай можете да използвате вградени обекти като 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;

За малко информация вижте:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Кой е най-дългият възможен телефонен номер в световен мащаб, който трябва да взема предвид в SQL varchar(дължина) за телефона

  2. SQL Server 2008 стойност за разделяне, сортиране и сливане

  3. Как да предадете нулева променлива към SQL съхранена процедура от C#.net код

  4. Как да сравним версиите на софтуера с помощта на SQL Server?

  5. Изчислете часовата разлика в минути в SQL Server