1. 概述
1.1 版本
报表服务器版本 | 功能变更 |
---|---|
11.0 | - |
1.2 预期效果
若数据库中存在一列数据是日期型的,希望查询某一段时间内的数据,此时要如何实现呢?
1.3 实现思路
定义两个报表参数(一个开始时间一个结束时间),然后设置过滤条件为日期列大于等于开始时间并且日期列小于结束时间。
2. 示例一:数据列过滤
2.1 模板准备
1)新建普通报表,新建模板数据集 ds1 ,SQL 语句为:SELECT * FROM 订单
2)表格设计如下图所示:
3)点击「模板>模板参数」,添加两个报表参数,分别为 starttime 和 endtime。如下图所示:
2.2 添加控件
进入参数面板,点击右上角「全部添加」按钮,添加两个日期控件,如下图所示:
2.3 过滤条件设置
双击 A2 单元格,选择
,给 A2 单元格增加如下图所示的过滤条件,过滤条件的意思是订购日期大于等于开始日期并且小于结束日期。注:数据库日期或时间为文本型时,建议用户转换为日期型或者时间型,因为文本型比较大小的原则,会不符合日期比较的情况。
2.4 效果查看
2.4.1 PC 端
保存模板,点击「分页预览」,选择好开始日期和结束日期后,点击查询按钮,效果如下图所示:
2.4.2 移动端
App 及 HTML5 端效果如下图所示:
2.5 已完成模板
已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Parameter\TimeScale\开始结束时间.cpt
点击下载模板:开始结束时间.cpt
3. 示例二:数据集 SQL 过滤
3.1 模板准备
1)新建普通报表,新建模板数据集 ds1 ,SQL 语句为:SELECT * FROM 订单 where 1=1 ${if(len(starttime)=0,""," and 订购日期>='"+starttime+"'")}${if(len(endtime)=0,""," and 订购日期<'"+endtime+"'")}
公式中语句的注释如下:
where 1=1 表示条件永真,防止没有参数条件时,where 后面没有有效内容导致出错。
len(starttime)==0 表示参数「starttime」为空。
and 订购日期>='"+starttime+"'"中间的「starttime」表示参数,'+' 为字符串拼接符号。
${if(len(starttime)=0,""," and 订购日期>='"+starttime+"'")}表示:定义了参数 starttime,如果参数值为空,则查询全部数据;如果不为空,查询日期大于等于 starttime 的数据,这里这样定义主要是为了实现参数为空时查询全部。
endtime 原理一致,不再做赘述。
2)表格设计,如下图所示:
3.2 添加控件
进入参数面板,点击右上角「全部添加」按钮,添加两个日期控件,如下图所示:
3.3 效果查看
效果与本文 3.4 节相同。
3.4 已完成模板
已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Parameter\TimeScale\开始时间结束时间.cpt
点击下载模板:开始时间结束时间.cpt
4. 扩展
1. 通常我们需要要校验:开始日期与结束日期不能为空、结束日期必须在开始日期之后、结束日期必须在开始日期后的某个时间段内,否则提示相关信息,详细设置点击: JS实现日期控件查询天数控制
2. 如果想实现同一张报表中可实现分别按年、月、日来查询数据,可参考:动态显示参数控件