目录:
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” |
Oracle | select * 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”、…… |
Oracle | select * 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}%'
如下图所示:
3.1.2 设计报表
将数据集字段拖入单元格中,报表样式如下图所示:
3.2 设置参数面板
编辑参数面板,添加三个控件。如下图所示:
添加「标签控件」,控件值为模糊查询销售员:
添加「文本控件」,控件名为 name,与数据集中 ${} 中的名称一致。
添加「查询按钮」
3.3 效果预览
3.3.1 PC 端
保存模板,点击「分页预览」,在文本框中输入模糊查询的字符串,点击「查询」按钮,即可查询出对应的销售数据,如下图所示:
3.3.2 移动端
App 及 HTML5 端效果预览,如下图所示:
4. 已完成模板编辑
已完成模板请参见:%FR_HOME%\webroot\WEB-INF\reportlets\doc\Primary\Parameter\模糊查询简单示例.cpt
点击下载模板:模糊查询简单示例.cpt