SQL打印全年日历
数据库环境:SQL SERVER 2008R2
我之前有写过打印本月日历的SQL,里头有详细的说明。具体请参考前面的博文——生成本月日历。
全年日历只是在本月日历的基础上加了月信息,并按月份分组求得。
下面直接分享SQL
/*基础数据:年初日期,全年有多少天*/
WITH x0
AS ( SELECT CONVERT(DATE, '2015-01-01') AS yearbegin ,
CONVERT(DATE, '2015-12-31') AS yearend ,
DATEDIFF(DAY, '2015-01-01', '2015-12-31') AS dayscount
),/*枚举全年的所有日期*/
x1
AS ( SELECT DATEADD(DAY, number, yearbegin) AS ndate
FROM x0 ,
master.dbo.spt_values spt
WHERE spt.type = 'P'
AND spt.number >= 0
AND spt.number <= dayscount
),/*罗列全年日期对应的月份,第几周,星期几,本月第几天*/
x2
AS ( SELECT ndate ,
DATEPART(month, ndate) AS nmonth ,
DATEPART(week, ndate) AS nweek ,
DATEPART(weekday, ndate) AS nweekday ,
DATEPART(day, ndate) AS nday
FROM x1
),/*按月份、所在周分组,生成全年日历*/
x3
AS ( SELECT nmonth ,
nweek ,
ISNULL(CAST(MAX(CASE nweekday
WHEN 1 THEN nday
END) AS VARCHAR(2)), '') AS 日 ,
ISNULL(CAST(MAX(CASE nweekday
WHEN 2 THEN nday
END) AS VARCHAR(2)), '') AS 一 ,
ISNULL(CAST(MAX(CASE nweekday
WHEN 3 THEN nday
END) AS VARCHAR(2)), '') AS 二 ,
ISNULL(CAST(MAX(CASE nweekday
WHEN 4 THEN nday
END) AS VARCHAR(2)), '') AS 三 ,
ISNULL(CAST(MAX(CASE nweekday
WHEN 5 THEN nday
END) AS VARCHAR(2)), '') AS 四 ,
ISNULL(CAST(MAX(CASE nweekday
WHEN 6 THEN nday
END) AS VARCHAR(2)), '') AS 五 ,
ISNULL(CAST(MAX(CASE nweekday
WHEN 7 THEN nday
END) AS VARCHAR(2)), '') AS 六
FROM x2
GROUP BY nmonth ,
nweek
)/*将月份相同的值只在第一行显示*/
SELECT REPLACE(CASE WHEN ROW_NUMBER() OVER ( PARTITION BY nmonth ORDER BY nweek ) = 1
THEN nmonth
ELSE -1
END, -1, '') AS 月份 ,
日 ,
一 ,
二 ,
三 ,
四 ,
五 ,
六
FROM x3
代码不算多,60多行,而且也好理解。如果觉得把“周日”放在第一列有点别扭,可以x2中生成所在周时对周日
做一些特别处理就可以了。
贴一下结果
(本文完)
SQL打印全年日历的更多相关文章
- 用SQL打印乘法口诀表
--用SQL打印出乘法口诀表 declare @i int ,@j int --@i是乘法口诀的行数 --一共九行 begin --每次都是从1*开始,j每循环一次递增 )--print每次输出都会换 ...
- bootstrap-year-calendar全年日历插件
使用方法使用bootstrap-year-calendar插件需要引入jQuery.Bootstap3的相关依赖文件和插件本身需要的js和css文件. <link rel="style ...
- MybatisPlus SQL 打印控制台
#applicaton.yml 配置 mybatis-plus: configuration: # 是否将sql打印到控制面板(该配置会将sql语句和查询的结果都打印到控制台) log-impl: o ...
- Liferay中SQL打印参数
XX\tomcat-7.0.42\webapps\ROOT\WEB-INF\classes\log4j.properties log4j.rootLogger=INFO, CONSOLE log4 ...
- spring boot mybatis sql打印到控制台
如何设置spring boot集成 mybatis 然后sql语句打印到控制台,方便调试: 设置方法: 在application.properties文件中添加: logging.level.com. ...
- springboot整合mybatis将sql打印到日志(转)
在前台请求数据的时候,sql语句一直都是打印到控制台的,有一个想法就是想让它打印到日志里,该如何做呢? 见下面的mybatis配置文件: <?xml version="1.0" ...
- springboot整合mybatis将sql打印到日志
在前台请求数据的时候,sql语句一直都是打印到控制台的,有一个想法就是想让它打印到日志里,该如何做呢? 见下面的mybatis配置文件: <?xml version="1.0" ...
- springboot+mybatis 配置sql打印日志
第一种: 配置类型 # 配置slq打印日志 logging.level.com.lawt.repository.mapper=debug重点: #其中 com.lawt.repository.ma ...
- 【NHibernate】配置- sql打印
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property> <pr ...
随机推荐
- 请求转发:MVC设计模式、细节、请求域属性的编程实例、请求重定向和请求转发的区别
请求转发:MVC设计模式.细节.请求域属性的编程实例.请求重定向和请求转发的区别 MVC设计模式将一次请求的响应过程分成三个功能模块(一般称之为层)来协同完成,这三个模块分别是Model(模型层) ...
- [转]NHibernate之旅(2):第一个NHibernate程序
本节内容 开始使用NHibernate 1.获取NHibernate 2.建立数据库表 3.创建C#类库项目 4.设计Domain 4-1.设计持久化类 4-2.编写映射文件 5.数据访问层 5-1. ...
- EXP-00056: ORACLE error 6550 encountered报错;
SQL> exp sys/sys file=/home/oracle/sys.dmp full=y Export: Release 11.2.0.3.0 - Production on Wed ...
- Linux下Java环境变量设置
我用的是oh my zsh,需要修改.zshrc,记一下免得以后忘记在哪儿改的. 如果你用的是自带的terminal那么用文本编辑器打开用户目录下的.bash_profile文件 在.bash_pro ...
- Android线程计时器实现
cocos2dx的计时器很好用,但当app进入后台,其计时器会pause掉,如果想要一个稳恒计时器就得自己去实现完成了,在Cocos2d-x for ios中我们可以利用NSTimer类并结合objc ...
- MSW下wxWidgets的安装与编译
教程摘自网上各大博客.贴吧.论坛,结合自己的实践做了一些实质性的修改. 一.安装 首先从http://sourceforge.net/projects/wxwindows/files/2.8.12/w ...
- [转] rtp h264注意点(FU-A分包方式说明)
总括: 一帧视频数据可以编码成多个H264的NALU, 每个NALU的开头为00 00 00 01: 一个RTP包可以传送 部分.一个或多个 NALU,看NALU的大小而定. 之前写过一篇文章,分析了 ...
- c语言的label后面不能直接跟变量申明
; goto JUMP; printf("x is : %d\n",x); JUMP: ; <=== 错误,lable后面不能申明变量,只能是表达式语句(statement) ...
- 【杭州(含嘉兴,绍兴,金华,湖州,义乌)】Uber优步司机奖励政策(2月1日~2月7日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 1116 HTML CSS
1. JPEG和GIF在使用时的注意事项: JPEG可以连续调次(复制品中有中间层次,如照片)图像中获得最好效果:JPEG可以用1600万色显示图像,是有损格式,不支持透明. GIF适用于几种纯色组成 ...