生成日曆的SQL語句

2021-05-01 03:31:43 字數 4424 閱讀 6924

declare @year nvarchar(4)

declare @yearmonth nvarchar(7)    --月份

declare @strtop nvarchar(200)

declare @fori int,@foryear int ,@maxday int

declare @rowx int --行位置

declare @strweekdaylist nvarchar(20)

declare @strprint nvarchar(300)

-- ***********************************===

set @year='2009'    --請在這裡輸入年份

-- ***********************************===

--設定日曆上邊的標題格式

set @strtop= '日'+char(9)+'一'+char(9)+'二' +char(9)+'三'++char(9)+'四'++char(9)+'五'++char(9)+'六' +char(13)+

'───────────────────────────'

--設定星期列表

set @strweekdaylist='日一二三四五六'

set @foryear=1

while @foryear<=12  --1月份至12月份

begin

--取當月格式

set @yearmonth=@year + '-' +cast( @foryear as nvarchar(2))   

--取當月的最大日期

set @maxday=day(dateadd(day,-1,dateadd(month,1,@yearmonth+'-01')))   

--找出1號的開始位置

set @rowx=charindex(right(datename(weekday,@yearmonth+'-01'),1),@strweekdaylist)-1

set @strprint=''

set @fori=1

while @fori<=@rowx    --構造1號的位置,並繪畫空白處

begin

set @strprint=@strprint+char(9)

set @fori=@fori+1

endset @fori=1

while @fori<=@maxday    --構造2號到月底的位置,並繪畫

begin

set @strprint=@strprint+cast(@fori as nvarchar(2)) +char(9)   

set @rowx=@rowx+1

set @fori=@fori+1

if (@rowx%7=0) --滿乙個星期就換行

begin

set @rowx=0

set @strprint=@strprint+char(13)

endend

set @foryear=@foryear+1

-- 列印輸出乙個月的結果

print '━━━━━━━━━━━━━━━━━━━━━━━━━━━'

print +char(9)++char(9)+'    '+@yearmonth+char(10)

print @strtop

print @strprint +char(10)

end━━━━━━━━━━━━━━━━━━━━━━━━━━━

2009-1

日 一 二 三 四 五 六

───────────────────────────

1 2 3

4 5 6 7 8 9 10

11 12 13 14 15 16 17

18 19 20 21 22 23 24

25 26 27 28 29 30 31

━━━━━━━━━━━━━━━━━━━━━━━━━━━

2009-2

日 一 二 三 四 五 六

───────────────────────────

1 2 3 4 5 6 7

8 9 10 11 12 13 14

15 16 17 18 19 20 21

22 23 24 25 26 27 28

━━━━━━━━━━━━━━━━━━━━━━━━━━━

2009-3

日 一 二 三 四 五 六

───────────────────────────

1 2 3 4 5 6 7

8 9 10 11 12 13 14

15 16 17 18 19 20 21

22 23 24 25 26 27 28

29 30 31

━━━━━━━━━━━━━━━━━━━━━━━━━━━

2009-4

日 一 二 三 四 五 六

───────────────────────────

1 2 3 4

5 6 7 8 9 10 11

12 13 14 15 16 17 18

19 20 21 22 23 24 25

26 27 28 29 30

━━━━━━━━━━━━━━━━━━━━━━━━━━━

2009-5

日 一 二 三 四 五 六

───────────────────────────

1 2

3 4 5 6 7 8 9

10 11 12 13 14 15 16

17 18 19 20 21 22 23

24 25 26 27 28 29 30

31 ━━━━━━━━━━━━━━━━━━━━━━━━━━━

2009-6

日 一 二 三 四 五 六

───────────────────────────

1 2 3 4 5 6

7 8 9 10 11 12 13

14 15 16 17 18 19 20

21 22 23 24 25 26 27

28 29 30

━━━━━━━━━━━━━━━━━━━━━━━━━━━

2009-7

日 一 二 三 四 五 六

───────────────────────────

1 2 3 4

5 6 7 8 9 10 11

12 13 14 15 16 17 18

19 20 21 22 23 24 25

26 27 28 29 30 31

━━━━━━━━━━━━━━━━━━━━━━━━━━━

2009-8

日 一 二 三 四 五 六

───────────────────────────

1 2 3 4 5 6 7 8

9 10 11 12 13 14 15

16 17 18 19 20 21 22

23 24 25 26 27 28 29

30 31

━━━━━━━━━━━━━━━━━━━━━━━━━━━

2009-9

日 一 二 三 四 五 六

───────────────────────────

1 2 3 4 5

6 7 8 9 10 11 12

13 14 15 16 17 18 19

20 21 22 23 24 25 26

27 28 29 30

━━━━━━━━━━━━━━━━━━━━━━━━━━━

2009-10

日 一 二 三 四 五 六

───────────────────────────

1 2 3

4 5 6 7 8 9 10

11 12 13 14 15 16 17

18 19 20 21 22 23 24

25 26 27 28 29 30 31

━━━━━━━━━━━━━━━━━━━━━━━━━━━

2009-11

日 一 二 三 四 五 六

───────────────────────────

1 2 3 4 5 6 7

8 9 10 11 12 13 14

15 16 17 18 19 20 21

22 23 24 25 26 27 28

29 30

━━━━━━━━━━━━━━━━━━━━━━━━━━━

2009-12

日 一 二 三 四 五 六

───────────────────────────

1 2 3 4 5

6 7 8 9 10 11 12

13 14 15 16 17 18 19

20 21 22 23 24 25 26

27 28 29 30 31

js生成日曆

演算法 1.根據指定年份和月份,計算該月第一天的起始位置和最後一天的結束位置 2.第乙個單元格到起始位置,填充上個月日期或空白 3.起始位置和結束位置填充該月日期 4.結束位置之後填充下個月日期或空白 效果圖 日曆初始化,預設當前月份日曆 function initcalendar calendar...

python生成日曆

按照python例項編寫python生成日曆的例項 如下 filename test.py author by www.runoob.com 引入日曆模組 from calendar import month 輸入指定年月 yy int input 輸入年份 mm int input 輸入月份 顯示...

oracle 如何用sql生成日曆

bi分析中,經常需要將事實表與時間維度表關聯起來,按年 月 日來逐層展示,常用的做法是建立一張日曆表,結構類似如下 create table t bas calendar d year number 4 not null d month number 2 not null d day number ...