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 ...
随机推荐
- 【转】SourceTree的简单使用
原文网址:http://blog.csdn.net/u011439289/article/details/42126507 今天开始参与公司项目的代码编写,公司内部采用的是gitlib,所以用到了So ...
- Android Loader详解一:概述
装载器从android3.0开始引进.它使得在activity或fragment中异步加载数据变得简单.装载器具有如下特性: 它们对每个Activity和Fragment都有效. 他们提供了异步加载数 ...
- 数据源加密-JDBC调用方式加密示例
package test; import org.gjt.mm.mysql.Driver; import java.sql.*;import java.util.Properties;import j ...
- 洛谷1439 排列LCS问题
洛谷1439 排列LCS问题 本题地址:http://www.luogu.org/problem/show?pid=1439 题目描述 给出1-n的两个排列P1和P2,求它们的最长公共子序列. 输入输 ...
- Qualcomm 8X camera daemon进程浅析
Camera 先看一下抽象层的主要流程: 首先启动一个守护进程 int qcamsvr_start(void)( qcamsvr.c) { 1. server_fd = open(server_dev ...
- 如何实例化i2c_client(四法)
一.在板文件进行client的实例化 在内核的初始化中(例如在板文件中)定义设备的信息.这种操作的前提是内核编译的时候已经确定有哪些i2c设备和它们的地址,还要知道连接的总线的编号. 比如在板文件/a ...
- mvc Html.BeginForm 生成 ?Length=
今天再做mvc Html.BeginForm的方法的时候发现提交的时候都会带length= ,后面查看网上文档资料是后台model设置最小长度生成的 改成 @using (Html.BeginFor ...
- FM笔记
1.获取生产订单状态 CALL FUNCTION 'STATUS_TEXT_EDIT' EXPORTING client = sy-mandt objnr = p_objnr spras = sy-l ...
- WinForm TextBox自定义扩展方法数据验证
本文转载:http://www.cnblogs.com/gis-crazy/archive/2013/03/17/2964132.html 查看公司项目代码时,存在这样一个问题:winform界面上有 ...
- RichTextBox选中文本时往自己的其他的位置实现拖拽
private void Form1_Load(object sender, EventArgs e) { richTextBox1.AllowDrop = true; richTextB ...