SQL server自動建立日曆表。

2022-09-10 03:30:12 字數 2894 閱讀 1258

做**功能需要統計每個月的上班天數,節假日因為每年的日期都不一樣,所以需要自己手動更新這些節假日

1:首先先自動建立乙個日曆表,選擇開始年月日和結束的年月日

不要同時執行,先執行建立表之後

create table [dbo].[time_dimension] (

[time_id] [

int] identity (1, 1

) not null ,

[the_date] [datetime] null ,

[the_day] [nvarchar] (

15) null ,

[the_month] [nvarchar] (

15) null ,

[the_year] [smallint] null ,

[day_of_month] [smallint] null ,

[holiday_type] [

int] null

) on [primary]

再執行儲存過程

declare @weekstring varchar(

12),

@ddate smalldatetime,

@smonth varchar(

20),

@iyear smallint,

@idayofmonth smallint,

@iweekofyear smallint,

@imonthofyear smallint,

@squarter varchar(

2),

@ssql varchar(

100),

@adddays

intselect @adddays = 1 --日期增量(可以自由設定)

select @ddate = '

01/01/2021

' --開始日期

while @ddate

< '

12/31/2022

' --結束日期

begin

select @weekstring =datename (dw, @ddate)

select @smonth=datename(mm,@ddate)

select @iyear=datename (yy, @ddate)

select @idayofmonth=datename (dd, @ddate)

select @iweekofyear=datename (week, @ddate)

select @imonthofyear=datepart(month, @ddate)

select @squarter = '

q ' + cast(datename (quarter, @ddate)as varchar(1

))

insert into time_dimension(the_date, the_day, the_month, the_year,

day_of_month

) values

(@ddate, @weekstring, @smonth, @iyear, @idayofmonth)

select @ddate = @ddate +@adddays

end

go

效果圖

接下來就是修改工作日型別了,上網搜尋日曆看每個假期的具體放假日子進行修改工作日型別了,這個過程就比較繁瑣了

--先把工作型別預設為工作日

update time_dimension set holiday_type=1

--根據條件把週六週日修改為2週末

update time_dimension set holiday_type=2 where the_day='星期六' or the_day='星期日'

--比如2022-01工作的天數

update time_dimension set holiday_type=3 where the_year=2022 and the_month=01 and day_of_month between 1 and 3

update time_dimension set holiday_type=3 where the_year=2022 and the_month=01 and day_of_month=31

--把2022-01週六週日調休改成工作日

update time_dimension set holiday_type=1 where the_year=2022 and the_month=01 and day_of_month between 29 and 30

--統計2022—01的工作總天數

select count(holiday_type) from time_dimension where holiday_type=1 and the_year=2022 and the_month=01

一月份的上班天數為

SQL Server 獲取日曆列表

需求 報表需要把未有資料的日期也顯示出來。需要一張日曆表和資料表 日曆表 left join 資料表,則可以實現。問題是,日曆表怎麼生成呢?其實只需要有一張連續數字的表就可以生成日曆表。方案一 通過系統內部表 master spt values 方案二 自定義日曆表 方案一 select conve...

SqlServer為什麼自動在主鍵上建立聚集索引

微軟推薦為每乙個表建立乙個聚集索引,但是由於sqlserver簡單易用,而且很多人並不了解聚集索引,非聚集索引這些東西,所以如果sqlserver不在主鍵上建立聚集索引的話,可能會導致大部分的表都是堆結構,而堆結構是亂序存放的,檢索很不方便,空間也不好管理,所以微軟就來了個強硬的,如果不在建表的同事...

SQL Server 2008R2建立自動備份計畫

本文主要利用sql server 2008 r2自帶的 維護計畫 建立乙個自動備份資料的任務。首先,如果sql server 處於以下狀態,右擊啟動就可以了 如果啟動請跳過此步驟 第二步,依次展開 管理 維護計畫 並右擊 維護計畫 選擇 新建維護計畫 這裡需要填寫備份資料庫的名字。點選 確定 後,將...