Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL — Utwórz tabelę tymczasową lub CTE pierwszego dnia miesiąca i nazwy miesięcy

Jeden sposób przy użyciu rekurencyjnego 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 

Lub za pomocą tabeli liczb:(w tym przypadku 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. Jak pogrupować wiersze o tej samej wartości w sql?

  2. Dodawanie elementów tempdb podczas uruchamiania w SQL Server

  3. Połączenie JDBC nie powiodło się, błąd:połączenie TCP/IP z hostem nie powiodło się

  4. Jak znaleźć wszystkie dzieci kolumny tabeli w tabeli serwera sql?

  5. Czy istnieje sposób na generowanie skryptów bazy danych na podstawie zapytania SQL w SQL Server?