反馈已提交

网络繁忙

下拉复选框多值模糊查询

  • 文档创建者:axing
  • 编辑次数:20次
  • 最近更新:RosieY 于 2021-12-09
  • 1. 概述

    1.1 问题描述

    某些场景下,我们希望使用下拉复选框选择多个值,按照每个值去模糊查询,如下图所示:

    1600664649450717.gif

    1.2 解决思路

    通过 SQL 语句来处理,主要是运用 like 关键词或类 like 函数,不同的数据库处理方法不一样,下面分别介绍。

    2. 不同数据库模糊查询

    1)Oracle 数据库解决方案

    主要使用 regexp_like() 函数来解决。新建数据查询(使用 Oracle 数据库内置的 emp 表),SQL语句如下:

    select * from emp where regexp_like(ename,'${ename}')

    注:查询语句中没有%号。

    2)MySQL 数据库解决方案

    MySQL 实现方式与 Oracle 类似,不同的是要使用 rlike 关键字,SQL语句如下:

    select * from emp where ename rlike '${ename}'

    注:查询语句中没有%号。

    或者使用 regexp 关键字,SQL语句如下:

    select * from emp where ename regexp '${ename}'

    注:查询语句中没有%号。

    3)SQL Server 数据库及其他数据库解决方案

    SQL Server 没有类似的关键字来解决,只能通过老办法拼接字符串,SQL 语句如下:

    select * from emp where ename like '%${ename}%'

    注1:查询语句中有%号。

    注2:此方案不仅适用 SQL Server,也适用其它数据库。

    3. 示例

    3.1 模板设计

    3.1.1 数据准备

    此处采用 FRDemo 数据库( SQLite 数据库)进行演示。

    新建数据查询ds1,SQL语句如下:SELECT * FROM 雇员 where 姓名 like '%${姓名}%',如下图所示:

    1600672231234178.png

    3.1.2 设计报表

    新建普通报表,将数据集 ds1 字段拖入 A2~F2 单元格中,报表主体设计样式,如下图所示:

    2021-07-09_13-47-15.png

    3.1.3 设计参数面板

    1)编辑参数面板,选择「全部添加」,将参数控件选择下拉复选框控件标签控件控件值为姓名:,如下图所示:

    2021-07-09_13-52-15.png

    2)下拉复选框控件控件名为姓名,与数据查询 ds1 中${}中的名称一致。编辑数据字典,类型设置选择自定义,自定义实际值、显示值。

    返回值类型为字符串,分割符为%' or 姓名 like '%。如下图所示:

    注:这里分隔符的使用和数据库类型有关,具体看数据库支持的 SQL 语句和定义数据集参数的方式。如Oracle、MySQL数据库返回值类型可以采用  | 作为分隔符,SQL Server、SQLite数据库返回值类型采用 %' or 姓名 like '% 作为分隔符。

    2021-07-09_13-57-51.png

    3.2 效果预览

    1)PC 端

    保存模板,点击「分页预览,如下图所示:

    1600664703825099.gif

    2)移动端

    App 与 HTML5 端效果,如下图所示:

    1600070659732801.gif


    3.3 注意事项

    问题描述

    保存模板,选择分页预览,勾选多个值查询时,如果出现以下提示:

    1600672597114423.png

    解决方案

    系统开启了 SQL 防注入,可在考虑安全后取消 or 关键字注入,如下图所示:

    1600067498351393.jpg

    4. 模板下载

    已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Parameter\MultiValue\下拉复选模糊查询.cpt

    点击下载模板:下拉复选模糊查询.cpt

    附件列表


    主题: 参数应用
    • 有帮助
    • 没帮助
    • 只是浏览

    售前咨询电话

    400-811-8890转1

    在线技术支持

    在线QQ:800049425

    热线电话:400-811-8890转2

    总裁办24H投诉

    热线电话:173-1278-1526

    文 档反 馈

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭