Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Database/JDBC/SQL/JDO/Hibernate  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 用报表来弥补数据库的不足二--按照月份扩展天数
灰色天空





发贴: 17
积分: 1
于 2008-11-17 15:55 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
上一篇当中我们阐述了在***当中如何list出一个连贯的月份(http://),在实际的应用当中,还有一种情况需要使用补足的手段。
例如下面这张考勤表。



可以看到这里的日期部分是1到31号的一个list。而在报表当中有两个参数,分别是让用户输入年和月。而每个月的具体的天数又是根据月份不同的,所以需要根据不同的月份来显示对应的天数。
所以这张表就需要一个稍微长一点的公式,作为list的结束数。在该公式当中要调用我们定义的年月参数,作为动态显示天数的根据。
=range(1,tointeger(mid(todate(CONCATENATE($year,"-",tointeger($month)+1,"-",1))-1,9,2)))
从最里层开始解释一下这个公式:$year,$month是我们在报表参数处定义好的参数名称,类型都是字符串,即用户要输入的年和月。Tointeger是将字符串类型的数据转换为日期,以便能够在月份上面+1。
然后使用CONCATENATE()字符串拼接函数,将($year,"-",tointeger($month)+1,"-",1))中的四个字符拼成我们需要的日期格式,例如$year的值是2008,$month的值是3,那么最终我们CONCATENATE($year,"-",tointeger($month)+1,"-",1)获取到的是2008-4-1也就是根据输入的参数,获取到了该月份下一个月的第一天。
TODTAE的作用,就是将我们拼出的日期,转换为date类型,然后-1,得到的即是当前输入月份的最后一天,例如输入的是2008,3,那么转换之后得到的值就是2008-3-31。
继续是MID函数,该函数和SUBSTR函数的功能相同,即从一个数据当中截取部分长度的字符,mid(todate(CONCATENATE($year,"-",tointeger($month)+1,"-",1))-1,9,2)返回的是上面的日期数据当中最后两位数据,即31。
最后range函数是和list功能相同的一个函数,起始值我们设置的1,结束值根据输入的月份不同。
然后下面的出勤数可以从数据库中取,关联的方法和上一章是相同的。




flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923