Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL - Tạo bảng tạm thời hoặc CTE của tên ngày đầu tiên của tháng và tháng

Một cách sử dụng cte đệ quy:

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 

Hoặc sử dụng bảng số:(trong trường hợp này là 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. Cách mã hóa một thủ tục được lưu trữ trong SQL Server

  2. SQL Server DRI (ON DELETE CASCADE) có chậm không?

  3. Khi nào tôi nên sử dụng ĐĂNG KÝ CHÉO qua THAM GIA INNER?

  4. Cách hiệu quả nhất trong SQL Server để lấy ngày từ ngày + giờ?

  5. Làm cách nào để bạn xem TẤT CẢ văn bản từ ntext hoặc nvarchar (max) trong SSMS?