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

Jak wygenerować tabelę kalendarza z datą miesiąca rozpoczęcia i datą miesiąca zakończenia?

Jeśli nie masz tabeli kalendarza, możesz użyć tabeli doraźnej

Przykład

Declare @Date1 date = '2018-01-01'
Declare @Date2 date = GetDate()

Select [Month] = D
      ,[Eomonth] = case when EOMONTH(D)>@Date2 then convert(date,GetDate()) else EOMONTH(D) end
 From  (
        Select Top (DateDiff(Month,@Date1,@Date2)+1) 
               D=DateAdd(Month,-1+Row_Number() Over (Order By (Select Null)),@Date1) 
         From  master..spt_values n1
       ) A

Zwroty

Month       Eomonth
2018-01-01  2018-01-31
2018-02-01  2018-02-28
2018-03-01  2018-03-31
2018-04-01  2018-04-30
2018-05-01  2018-05-31
2018-06-01  2018-06-30
2018-07-01  2018-07-31
2018-08-01  2018-08-31
2018-09-01  2018-09-30
2018-10-01  2018-10-31
2018-11-01  2018-11-30
2018-12-01  2018-12-31
2019-01-01  2019-01-31
2019-02-01  2019-02-13   <-- Today's date


  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 mogę ręcznie wstawić tożsamość?

  2. Monitorowanie postępu zapytania SQL w SQL SERVER

  3. Wyraźny błąd w polu obrazu

  4. Rejestrowanie stosu wywołań SQL Server podczas zgłaszania błędów

  5. Konwersja nie powiodła się podczas konwertowania wartości varchar „moja zwrócona wartość” na typ danych int