反馈已提交

网络繁忙

模糊查询

  • 文档创建者:天玑科技-叶然
  • 历史版本:34
  • 最近更新:Fay 于 2022-11-23
  • 1. 概述

    1.1 应用场景

    模糊查询,是一种很方便的查询方式,用来查询符合某种指定格式的数据。比如用户想查询所有姓张的销售员的数据,就可以使用模糊查询。

    2021-12-08_17-26-54.gif

    1.2 实现思路

    模糊查询也是一种 筛选查询,但和精准查询不同的是模糊查询匹配方式是模糊匹配。我们知道筛选查询 可以通过数据集参数和模板参数两种方法实现,那模糊查询也就对应两种实现方式。

    • 数据集参数:利用数据库 SQL 语言的模糊搜索,如 “like”、通配符“_”“%”,对数据进行模糊查询。

    • 模板参数:通过设计器的“包含”、“开头是”、“结尾是”等不完全匹配过滤条件过滤数据。

    2. 实现方法

    2.1 数据集参数

    数据集参数 是定义在 SQL 语句中的参数,即在 SQL 查询数据时,就实现了数据的过滤。如果你的数据是从数据库查询获得,推荐使用此方法。

    2.1.1 定义数据集参数

    通过数据集参数实现模糊查询时,首先要根据你想要实现的模糊匹配原则和所使用的数据库支持的 SQL 语法定义一个数据集参数。

    如使用 FRDemo 中销量表,查询某个姓氏的销售员的数据。FRDemo是一个 SQLite 数据库,支持 Like 匹配的用法,所以数据集参数可以如下定义:SELECT * FROM 销量 where 销售员 like '%${name}%',这样就定义了一个 name 参数,只要销售员姓名含有 name,就会被匹配到。

    1584069538662495.png

    如下列出了一些数据库中常用的模糊查询的语法,用户可以根据实际链接的数据库选择使用。

    符号定义数据库语句
    "%"
    表示任意 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*'

    2.1.2 绑定过滤控件

    2.1.1 节中已经定义好了数据集参数,如果要实现查询就必须绑定一个控件。点击参数面板,在参数面板「组件设置」处可以看到定义的 name 参数,点击将其添加在参数面板中,根据需要选择一个控件类型,这里我们选择「文本控件」。如下图所示:

    2.1.3 设计报表实现过滤

    将 ds1 数据集的数据列拖到报表中,设计报表,如下图所示:

    1584069504536972.png

    2.1.4 效果预览

    保存模板,点击「分页预览」,在文本框中输入模糊查询的字符串,也就对应着 name 参数为不同的值,则数据库 SQL 语句就不同,这样就实现了模糊查询。PC 端效果如下图所示:

    2021-12-08_17-26-54.gif

    App 及 HTML5 效果如下图所示:

    2022-08-30_16-06-32.gif

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

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

    2.2 模板参数

    模板参数 实现数据筛选查询和数据集参数不同,数据集参数是在从数据库中查询数据时就实现了过滤,而模板参数是将数据列添加在单元格中后再过滤,适合内置数据集或者文件数据集使用。

    2.2.1 定义模板参数

    这里相当于提前定义好一个参数,参数可以是 模板参数全局参数系统参数。区别在于全局参数所有模板都可以用,系统参数不用再定义。若你定义了一个全局参数想要实现过滤,或者想要通过系统参数过滤,也可以参考此方法。

    定义一个模板参数 name。如下图所示:

    2.2.2 绑定过滤控件

    2.2.1 节中已经定义好了模板参数,如果要实现查询就必须绑定一个控件。点击参数面板,在参数面板「组件设置」处可以看到定义的 name 参数,点击将其添加在参数面板中,根据需要选择一个控件类型,这里我们选择「文本控件」。如下图所示:

    2.2.3 添加过滤条件

    新建数据集,SQL 语句为:SELECT * FROM 销量,即默认查询销量表中所有数据。将数据列添加到单元格中,并设置报表样式,如下图所示:

    这时默认是所有数据,如果要实现查询,就必须添加过滤条件,双击 A2 单元格,为其添加过滤条件。过滤条件为销售员这一列的值包含参数 name。如下图所示:

    这样就实现了过滤,保存模板,点击「分页预览」,在文本框中输入模糊查询的字符串,也就对应着 name 参数为不同的值,则报表过滤条件不同,查询出的数据也就不同,这样就实现了数据模糊查询。如下图所示:

    2.2.4 效果预览

    保存模板,效果如 2.1.4 节所示。

    3. 索引

    参考文档应用场景效果图
    文本控件模糊查询关键字高亮显示在对报表进行模糊查询的时候,希望查询出来的数据列中,高亮显示模糊关键字。9.gif
    下拉复选框多值模糊查询希望使用下拉复选框选择多个值,按照每个值去模糊查询13.gif


    附件列表


    主题: 参数应用
    • 有帮助
    • 没帮助
    • 只是浏览
    中文(简体)

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

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

    不再提示

    10s后关闭

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持