SQL语句绘画日历

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='2010' --显示的年份

--设置日历上边的标题格式
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)--这里的数字CHAR(13)有什么特殊的含义?
          END
      END
    SET @ForYear=@ForYear+1
    --打印输出一个月的结果
    PRINT '—————————————————————————————————'
    PRINT +CHAR(9)++CHAR(9)+'    '+@YearMonth+CHAR(10)
    PRINT @strTop
    PRINT @strPrint+CHAR(10)
  END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值