做**功能需要統計每個月的上班天數,節假日因為每年的日期都不一樣,所以需要自己手動更新這些節假日
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
接下來就是修改工作日型別了,上網搜尋日曆看每個假期的具體放假日子進行修改工作日型別了,這個過程就比較繁瑣了
--先把工作型別預設為工作日--根據條件把週六週日修改為2週末update time_dimension set holiday_type=1
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 處於以下狀態,右擊啟動就可以了 如果啟動請跳過此步驟 第二步,依次展開 管理 維護計畫 並右擊 維護計畫 選擇 新建維護計畫 這裡需要填寫備份資料庫的名字。點選 確定 後,將...