生成日历的SQL语句
2009-07-21 19:39
323 查看
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
END
SET @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)
END
END
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
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
END
SET @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)
END
END
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
相关文章推荐
- SQL语句生成日历
- Oracle SQL语句生成日历
- 通过SQL语句生成日历表格
- Oracle SQL语句生成日历 connect by
- 生成日历的SQL语句
- 一个分页sql语句生成的function
- MySQL批量生成复制表SQL语句
- 用Ruby写自动生成Sql语句脚本遇到的问题
- ibatis3中执行SelectBuilder/SqlBuilder生成的SQL语句。
- excel中生成SQL语句 操作
- 【转】手把手教你-----巧用Excel批量生成SQL语句,处理大量数据
- SQL语句生成随机数
- 如何将sqlserver表中的数据导出sql语句或生成insert into语句
- sql语句可以直接生成表中字段的注释吗?
- 查询列表后生成序号列的SQL语句
- oracle:如何用sql生成日历
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- FDQuery多表更新生成sql语句的问题
- JAVA自定义注解实现SQL语句自动生成DEMO(2)
- 使用Excle生成SQL语句总结