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 ...
随机推荐
- python 零散记录(二) 序列的相关操作 相加 相乘 改变 复制
序列相加: [1,2] + [3,4] == [1,2,3,4] #字符串也是序列的一种 'hello' + 'world' == 'hello world' #但是序列相加只限于相同类型的序列间相加 ...
- Bzoj1818: [Cqoi2010]内部白点 && Tyvj P2637 内部白点 扫描线,树状数组,离散化
1818: [Cqoi2010]内部白点 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 704 Solved: 344[Submit][Status] ...
- (转载)WindowsXP上安装和运行神器SqlMap的步骤
在Windows XP上安装和运行SqlMap的步骤…… 1.首先下载SqlMap 点击下载. https://codeload.github.com/sqlmapproject/sqlmap/leg ...
- 如何成为一名优秀的web前端工程师(前端攻城师)?
程序设计之道无远弗届,御晨风而返.———— 杰佛瑞 · 詹姆士 我所遇到的前端程序员分两种:第一种一直在问:如何学习前端?第二种总说:前端很简单,就那么一点东西. 我从没有听到有人问:如何做一名优秀. ...
- mongDB基本命令和Java操作MongoDB
上一篇博文<mongoDB安装>我们安装了mongoDB,现在来复习一下它的一些基本命令:mongoDB的bin目录加入到path之后,命令行中输入mongo: 然后我们进入正题 1.查看 ...
- HTML5和CSS3不仅仅是两项新的Web技术标准
HTML5和CSS3不仅仅是两项新的Web技术标准 HTML5和CSS3不仅仅是两项新的Web技术标准,更代表了下一代HTML和CSS技术.虽然HTML5的标准规范还没有正式发布,但是未来的发展前景已 ...
- HTML5的渐变色 渐变的两种类型 createLinearGradient 和createRadialGradient
今天又再看了html5的颜色渐变API,发现没有第一次看那么复杂. 不过我对这个颜色渐变存在着一个疑惑就是两种色带之间,那段是属于两种颜色混合的,有点模糊. 比如从红色变成黄色,在红与黄之间的那个地方 ...
- HTML5到底能给企业带来些什么?
一.改变企业网络广告的模式与分布 广告是企业网络营销的主要方式之一.十几年来,无论是展示还是互动,基本被Adobe Flash所主宰.然而,HTML5网页的多媒体特性.三维.图形及特效,超炫的浏览体验 ...
- git 命令归纳
git 新手一枚,随用随更新 git clone git@example.com:project-name.git 克隆 git branch [-a -r] 查看分支[所有 远端] git pull ...
- [Javascript + rxjs] Using the map method with Observable
Like an array, Observable has a map method that allows us to transform a sequence into a new Observa ...