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

SQL - Създайте временна таблица или CTE на първия ден от месеца и имената на месеците

Един начин с използване на рекурсивен cte:

declare @calYear int = 5, @currentYear char(4) = '2014'

;with cte (dt) as (
    select DATEFROMPARTS(@currentyear,1,1) dt
    union all
    select dateadd(month,1,dt) 
    from cte where dt < dateadd(year,@calyear,DATEFROMPARTS(@currentyear,1,1))
    )

select year(dt) YearDesc, datename(month, dt) MonthName, month(dt) MonthNum, dt FirstDayOfMonth 
from cte
order by dt 

Или използвайки таблица с числа:(в този случай master..spt_values)

declare @calYear int = 5, @currentYear char(4) = '2014'

;with cte2 (dt) as (
    select dateadd(month,number,DATEFROMPARTS(@currentyear,1,1)) dt
    from master..spt_values where type = 'p'
    and number <= 12*@calYear
    )
select year(dt) YearDesc, datename(month, dt) MonthName, month(dt) MonthNum, dt FirstDayOfMonth 
from cte2
order by dt 



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Уникално ограничение, с изключение на NULL стойности

  2. Как да направите актуализация на таблица на Sql Server CE от друга таблица

  3. Пагинирана заявка, използваща сортиране на различни колони, използвайки ROW_NUMBER() OVER () в SQL Server 2005

  4. Осигурени данни в T-SQL

  5. Съхранение на XML данни в SQL Server