用SQL打印出每年2月日历
来源:互联网 发布:libtorrent java 编辑:程序博客网 时间:2024/05/16 05:37
/*
Author:James
cDate :2014-02-12
Desc :平润年2月计算方法
Remark:这是本人业余时间写的一段SQL代码,如有思维漏洞请各位指教!
*/
--平年闰年计算规则:
--闰年:公元年数可被4整除为闰年,但是正百的年数必须是可以被400整除的才是闰年
--平年:其他都是平年
--select datepart(dw,'2011-02-01')
--select 2002%4
--2000~2099
declare @date smalldatetime ='1900-02-01'
if(isdate(@date)=0) begin
print '输入的日期有误,请核对后重新输入!'
end
else begin
--判断是闰年或平年
if(year(@date)%4=0) begin
if(right(year(@date),1)= 0 and left(right(year(@date),2),1) = 0) begin
if(year(@date)%400 = 0) begin
print '闰年:'+convert(varchar(4),year(@date))+'年'
print '2 月:29天'+char(13)+char(10)+'闰年:'+convert(varchar(4),year(@date))+'年'+'2月'
print '--------------------------------------------'
print ' 日 一 二 三 四 五 六'
print '--------------------------------------------'
--循环输出二月天数
declare @num int =1,@numstr varchar(50) = ''
set @date =convert(date,(convert(varchar(4),year(@date))+'-02-01'))
while(@num <=29) begin
set @date = dateadd(dd,@num-1,@date)
--控制空格数量
if(@num<10) begin
set @numstr +=space(2)+convert(varchar(20),@num)
end
else begin
set @numstr +=space(1)+convert(varchar(20),@num)
end
--控制打印
if(datepart(dw,convert(date,@date,120)) =7) begin
if(@num = 5) begin
set @numstr = space(5)+@numstr --如果是打印第一行则在变量前追加5个空格
end
print @numstr --打印输出
set @numstr = ''
end
--打印输出
if(@num =29) begin print @numstr end
set @num +=1 --累加
set @date =convert(date,(convert(varchar(4),year(@date))+'-02-01')) --每次在1号的基础之上累加一
end
print '--------------------------------------------'
end
else begin
print '平年:'+convert(varchar(4),year(@date))+'年'
print '2月:28天'
print '此处可参考平年算法'
end
end
else begin
print '闰年:'+convert(varchar(4),year(@date))+'年'
print '2月:29天'
print '此处可参考与计算正纪年闰年算法'
end
end
else begin
print '平年:'+convert(varchar(4),year(@date))+'年'
print '2 月:28天'+char(13)+char(10)+'平年:'+convert(varchar(4),year(@date))+'年'+'2月'
print '--------------------------------------------'
print ' 日 一 二 三 四 五 六'
print '--------------------------------------------'
--循环输出二月天数
declare @num_P int =1,@numstr_P varchar(50) = '',@TempDate datetime
set @date =convert(date,convert(date,(convert(varchar(4),year(@date))+'-02-01')),120)
while(@num_P <=28) begin
set @date = dateadd(dd,@num_P-1,@date)
--控制空格数量
if(@num_P<10) begin
set @numstr_P +=space(2)+convert(varchar(20),@num_P)
end
else begin
set @numstr_P +=space(1)+convert(varchar(20),@num_P)
end
--控制打印
if(datepart(dw,convert(date,@date,120)) = 7) begin
set @TempDate = convert(date,convert(date,(convert(varchar(4),year(@date))+'-02-01')),120)
if(datepart(dw,@TempDate) = 1 ) begin --星期日
set @numstr_P = space(0)+@numstr_P
end
else if(datepart(dw,@TempDate) = 2 and dateadd(dd,-5,@date) = @TempDate) begin --星期一
set @numstr_P = space(3)+@numstr_P
end
else if(datepart(dw,@TempDate) = 3 and dateadd(dd,-4,@date) = @TempDate) begin --星期二
set @numstr_P = space(6)+@numstr_P
end
else if(datepart(dw,@TempDate) = 4 and dateadd(dd,-3,@date) = @TempDate) begin --星期三
set @numstr_P = space(9)+@numstr_P
end
else if(datepart(dw,@TempDate) = 5 and dateadd(dd,-2,@date) = @TempDate) begin --星期四
set @numstr_P = space(12)+@numstr_P
end
else if(datepart(dw,@TempDate) = 6 and dateadd(dd,-1,@date) = @TempDate) begin --星期五
set @numstr_P = space(15)+@numstr_P
end
else if(datepart(dw,@TempDate) = 7 and dateadd(dd,0,@date) = @TempDate) begin --星期六
set @numstr_P = space(18)+@numstr_P
end
print @numstr_P --打印输出
set @numstr_P = ''
end
--打印输出
if(@num_P =28) begin print @numstr_P end
set @num_P +=1 --累加
set @date =convert(date,convert(date,(convert(varchar(4),year(@date))+'-02-01')),120) --每次在1号的基础之上累加一
end
print '--------------------------------------------'
end
end
- 用SQL打印出每年2月日历
- 打印出日历(用calendar类)
- C 语言输入年和月打印出本月的日历
- [学习笔记]打印出该月的日期表格,日历形式
- sql server 打印日历
- JAVA 打印当前月日历
- 控制台打印当前月日历
- 打印出任意年份的日历
- 打印出任意年份的日历
- 输入一个时间段(开始时间,结束时间),一个参数来控制每行输出的月数,打印出日历
- java实现一个月的日历打印
- 用java打印日历
- 输入的日期用calendar来打印出这个月的日历(复习)
- mybatis打印出sql语句
- C++ 输入年月,打印出这个月的日历
- 求出每年每月的日历
- 从控制台输入年、月、日,打印本月日历,用*标示输入的日期
- SQL Server一个打印日历的函数
- AJAX应用技巧
- 12款最佳Linux命令行终端工具
- [XMPP]xampp apache 项目部署
- R文件,真心怕你啊
- linux下 主机硬件及系统基本信息查询方法
- 用SQL打印出每年2月日历
- UVa: 12097 Pie
- 有效解决CPU温度过高的方法AMD4200+
- android 自定义ProgressBar
- 【自学笔记】Intent Extras附加信息——两个activity之间的信息传递
- 关于关于_WIN32_WINNT的说明
- 小P的故事——神奇的Dota 【完全背包】
- linuxcast笔记:linux重定向、管道和文本处理工具
- 成功的人不会去做的事