历史版本25 :模糊查询 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 应用场景

模糊查询,是一种很方便的查询方式,用来查询符合某种指定格式的数据。比如用户想查询所有包含 a 字符的数据,就可以使用模糊查询。

1.2 实现思路

在FR设计器中,实现模糊查询可以利用 SQL 关键字加上通配符“_”“%”等组合,搭配参数控件进行查询。

2. 数据库使用方法编辑

本文将简单介绍部分数据库中模糊查询的使用方法。用户可以根据实际使用需求链接不同的数据库,详情请参见:配置外接数据库

符号定义数据库语句
"%"
表示任意 0 个或多个字符

SQLServer

Oracle

MySQL

Select * from 表名 where 列名 like '%' //查询出全部   

Select * from 表名 where 列名 like 'x' //完全匹配查询  

Select * from 表名 where 列名 like '%x' //右为x,前面可以有任意位字符  

Select * from 表名 where 列名 like 'x%' //左为x,后面可以有任意位字符  

Select * from 表名 where 列名 like '%x%' //中间为x,左右都可以有任意位字符

注:x 支持替换为参数,例如 SELECT * FROM 销量 where 销售员 like '%${name}%' 

"_"表示单个字符

SQLServer

Oracle

MySQL

Select * from 表名 where 列名 like '_x' //右为x,前面有一位字符 

Select * from 表名 where 列名 like '__x'  //右为x,前面有两位位字符  

Select * from 表名 where 列名 like 'x__'  //左为x,后面有两位位字符

"[]"

表示括号内所列字符中的一个

指定一个字符,字符串或者范围,要求所匹配对象是他们中的任意一个

注:如 [ ] 内有一系列字符( 01234、abcde 之类的)则可略写为“0-4”、“a-e”

SQLServer

Select * from 表名 where 列名 like '[张李王]三' //将找出“张三”,“李三”,“王三”(而不是“张李王三”) 

Select * from 表名 where 列名 like  '老[1-9]' //将找出“老1”,“老2”,……,“老9”

Oracleselect * from 表名 where regexp_like(列名,'[张李王]三') //将找出“张三”,“李三”,“王三”(而不是“张李王三”)
MySQL

select * from 表名 where 列名 rlike '[张李王]三' //将找出“张三”,“李三”,“王三”(而不是“张李王三”)

select * from 表名 where 列名 regexp '[张李王]三'  //将找出“张三”,“李三”,“王三”(而不是“张李王三”)

"[^]"

表示不在括号列中的单个字符

其取值与 [] 相同,但它要求所匹配对象为指定字符以外的任一字符

SQLServer

Select * from 表名 where 列名 like '[^张李王]三' //将找出不姓“张”,“李”,“王”的“赵三”,“孙三”等

Select * from 表名 where 列名 like '老[^1-4]'  //将排除“老1”到“老4”,寻找“老5”,“老6”、…… 

Oracleselect * from 表名 where regexp_like(列名,'[^李王]三')  //将找出不姓“李”,“王”的“赵三”,“孙三”等
MySQL

select * from 表名 where 列名 rlike '[^李王]三'   //将找出不姓“李”,“王”的“赵三”,“孙三”等

select * from 表名 where 列名 regexp '[^李王]三' //将找出不姓“李”,“王”的“赵三”,“孙三”等

特殊字符模糊查询当要查询的字符串包含通配符的时候,可以采用下面的方法来查询SQLServer

[ ]将特殊字符包含:

select * from 表名 where 列名 like '_[%]_'

Oracle

用 escape 关键字将特殊字符转义:

select * from 表名 where 列名 like '_\%_'  escape '\'

MySQL

\将特殊字符转义:

select * from 表名 where 列名 like '_\%_'

注:Access 的模糊查询是 '?','*' ,如 :Select * from 表名 where 列名 like '*b*'

3. 示例编辑

3.1 新建模板

新建普通报表,存储为%FR_HOME%\webroot\WEB-INF\reportlets\doc\Primary\Parameter\模糊查询简单示例.cpt

3.1.1 新建数据集

新增数据集 ds1:SELECT * FROM 销量 where 销售员 like '%${name}%'

如下图所示:

1584069538662495.png

3.1.2 设计报表

将数据集字段拖入单元格中,报表样式如下图所示:

1584069504536972.png

3.2 设置参数面板

编辑参数面板,添加三个控件。如下图所示:

  • 添加「标签控件」,控件值为模糊查询销售员:

  • 添加「文本控件」,控件名为 name,与数据集中 ${} 中的名称一致。

  • 添加「查询按钮」

1584069877591732.png

3.3 效果预览

3.3.1 PC 端

保存模板,点击「分页预览」,在文本框中输入模糊查询的字符串,点击「查询」按钮,即可查询出对应的销售数据,如下图所示:

1584070023945785.png

3.3.2 移动端

App 及 HTML5 端效果预览,如下图所示:

1584071026245824.png

4. 已完成模板编辑

已完成模板请参见:%FR_HOME%\webroot\WEB-INF\reportlets\doc\Primary\Parameter\模糊查询简单示例.cpt

点击下载模板:模糊查询简单示例.cpt

5. 索引编辑

参考文档应用场景效果图
文本框实现范围查询

用户在输入空值时查询全部数据,输入单值时查询该值对应数据,输入范围(用任意字符分隔两个数字即可)时查询范围内数据。

8.gif
文本控件模糊查询关键字高亮显示在对报表进行模糊查询的时候,希望查询出来的数据列中,高亮显示模糊关键字。9.gif
下拉框/下拉复选框/下拉树的模糊搜索在使用控件进行填报或查询数据时,若数据字典中的数据很多,找起来会很麻烦。因此 FineReport 提供了控件的模糊搜索功能来提高输入效率。--
下拉框模糊搜索精确匹配方案下拉框控件自带的模糊查询功能,在匹配的时候会将多个字符拆开来进行匹配。实际使用中希望实现精确一些的模糊搜索10.gif
下拉框模糊搜索慢的解决方案通过控件数据字典联动的方式再使用下拉框进行模糊搜索,从而提高速度。11.gif
无穷区间参数查询查询面板可以通过比较符号,如大于号>或小于号<,定义无穷区间查询12.gif
下拉复选框多值模糊查询希望使用下拉复选框选择多个值,按照每个值去模糊查询13.gif
开始时间、结束时间查询某一段时间内的数据14.png
周报输入某个日期的时候,查询出当前日期所在周的数据即周报查询15.png
季报输入一个日期时,查询出该日期的所在季度的数据3.png