参数为空取全部数据的几种做法

xiaohuihui-11 xiaohuihui-11     2023-05-04     627

关键词:

润乾报表中支持用户通过参数对数据过滤,而当多个条件联合查询时,如果某个条件没有输入值,用户会希望该条件失效,也就是条件为空则视为没有这个条件,取出所有满足其它条件的数据。

例如,按照地区查询,参数值输入东北,则报表展示如下:

技术图片

如该参数为空,则结果如下:

技术图片

下面通过一个订单信息表来看下该需求的实现过程。

首先在报表设计器中制作一个网格式报表,如图:

技术图片

并在该报表的基础上增加两个参数用于数据过滤:

技术图片

area:用于接收参数对地区进行过滤

amount:接收参数对订单金额过滤

接下来更改数据集,增加参数过滤,如图:

技术图片

技术图片

在 sql 语句中,条件写法为:(货主地区 =? or ? is null),在对应的参数表达式中写上两个相同的参数名(area),表示如果 area 参数有值,则用货主地区 =area 条件过滤数据,否则执行 or 参数 is null,这样参数为空时后边条件成立,取出所有数据。

注意:

1、 参数表达式中内容和 sql 语句中的问号要一一对应,此处可以写重复名称。

2、 如果有多个条件过滤数据,则用括号将每组条件括起来。

通过上述操作,可以实现用户的需求。在实际使用中,用户希望货主地区能够传递多个地区,一次查询出多个地区数据,比如要同时查询华北和东北地区数据,对于此种方式,需要将对应参数类型更改为数组方式,并且更改 sql 语句中的条件写法。

将 area 参数类型更改成字符串组,并更改 sql 语句中语法为:

技术图片

如多选方式,sql 中要用 in (?) 方式。

现在预览报表,如果 area 参数为空,则取出所有地区数据,如下图:

技术图片

但是当 area 参数多选时会报错,如下图:

技术图片

主要原因:如参数类型是数组方式,参数值是多个时,sql 中的问号会自动根据值的个数解析出多个,这样 or 后边多个问号会出现语法错误。

解决办法:将 or 后对应的参数用 string 函数强制转换成字符串格式即可,如:

技术图片

再次预览报表即能取出正确结果。

注意:

一:当数据为 db2 时,使用 or ? is null 会出错,此时需要更改 sql 语句为 cast(? as varchar(10)) is null) 把这个 varchar 改成数据库中的类型即可, 需要对参数进行类型转换 。

二:当参数类型为数组形式,按照上边做法使用 string()函数转换时,有可能数组值太多导致 sql 报错,此时可改成:where ( 货主地区 in (?) or ? =’!EOF’),在参数表达式中写入 if(@area==” OR @area==null ,’!EOF’),此种做法是如果参数为空则给对应的问号处返回!EOF,这样就取出所有数据了,同理,DB2 问题也可以用此种方式实现。

可以看到,数据集的参数表达式处不仅能够直接写参数,而且还可以写润乾的函数对参数值先行处理,将处理后的结果再传递到 sql 中进行过滤。回顾一下,我们首先解决的了单一参数值为空时,忽略该条件的问题;然后通过数组类型解决了参数中同时传递多个值的问题;最后通过分析,利用润乾报表可以在参数表达式中写函数的方式,彻底解决了传递多个参数值可能会遇到的问题。

后台参数验证的几种方式

前言  参数验证是一个常见的问题,无论是前端还是后台,都需对用户输入进行验证,以此来保证系统数据的正确性。对于web来说,有些人可能理所当然的想在前端验证就行了,但这样是非常错误的做法,前端代码对于用户来... 查看详情

后台参数验证的几种方式

前言  参数验证是一个常见的问题,无论是前端还是后台,都需对用户输入进行验证,以此来保证系统数据的正确性。对于web来说,有些人可能理所当然的想在前端验证就行了,但这样是非常错误的做法,前端代码对于用户来... 查看详情

java保留两位小数的几种做法

页面或界面上展示的数据保留小数点后两位。原文:https://www.iteye.com/blog/mouselearnjava-1961008 为了达到这样的展示效果,本文列举了几个方法: 1.使用java.math.BigDecimal 2.使用java.text.DecimalFormat 3.使用java.text.NumberFormat&nb... 查看详情

插入null数据的几种情况

1、在emp表中插入一条数据,其中mgr为空insertintoemp(empno,ename,job,mgr)values(4528,"Join","Clerk",null) 2、在emp表中插入一条记录,其中只有字段empno不为空insertintoemp(empno)values(45289) 3、在emp表中插入一条每个字段都为空的数据insertinto... 查看详情

mysql定时备份的几种方式(非常全面)(代码片段)

...> /data/mysqlDump/mydb.sql2.备份全部数据库的结构(加-d参数)mysqldump -uroot -p123456 -A -d > /data/mysqlDump/mydb.sql3.备份全部数据库的数据(加-t参数)mysqldump -uroot -p123456 -A -t > /data/mysqlDump/mydb.sql4.备份单个数据库的数据... 查看详情

关于区间$mex$的几种做法(代码片段)

关于区间\(mex\)的几种做法题目链接题目大意在求\(SG\)函数时提到过一个\(mex\)函数;\(mex(\a_i\)\)表示在\(a\)中未出现的最小自然数,其中\(a_i\in\N\)。给一个长度为\(n\)的序列\(a\),\(m\)次查询,每次查询\(mex(\a_i\),i\in[l,r]\)1、莫队+树... 查看详情

数据字典的缓存刷新与读取的几种方式

之前有写过数据字典的相关业务是怎么做的,有朋友留言问如何读取,其实很简单,最简单的方式就是每次读取数据库,但是这样的做法很不好,因为数据字典在数据库中属于冷资源,不是经常会变得数据,这样的数据用缓存来... 查看详情

请求后台数据的几种方式

...法Ajax  封装:整理一段代码块,把变化的东西抽取为参数(形参) 请求方式(get post) 请求的路径(url) 参数条件  参数名=值&参数名=值 是否异步  truefalse 异步请求的目的:拿到数据&nbs... 查看详情

php获取参数的几种方法

1.获取地址栏参数:$_SERVER[\'QUERY_STRING\'];2.获取参数值//post提交用$_POST[\'参数名称\']获取值//get提交用$_GET[\'参数名称\']获取值//无论是post还是get方式提交都可以用$_REQUEST用$_REQUEST[\'参数名称\']获取值参考技术A$GLOBALS—引用全局作... 查看详情

不同页面之间实现参数传递的几种方式讨论

 不同页面之间实现参数传递的几种方式讨论(黎声)  由于web系统采用http协议在浏览器和服务器之间传输数据,而http协议是一种无状态的协议,如何在不同页面之间传递数据,可以有一下几种方式  方式一:表... 查看详情

接收表单参数的几种方法

1.第一种        Map<String,String[]>paramMaps=request.getParameterMap();//接受参数      String 表单名=((String[])paramMaps.get("表单名"))[0]; 获取表单数据时总是用request.getParameter(&ldq 查看详情

struts2获取参数的几种方式

Struts2由于是一个贴心的框架,所以获取参数这种体力活,就无需再通过原生的request来getParameter了,有如下几种方式进行获取1、Action中属性驱动,必须提供与form表单name相同的后台属性get/set,这种方式适合数据量比较少的form表... 查看详情

recyclerview数据刷新的几种方式

小结刷新全部可见的item,notifyDataSetChanged()刷新指定item,notifyItemChanged(int)从指定位置开始刷新指定个item,notifyItemRangeChanged(int,int)插入、移动一个并自动刷新,notifyItemInserted(int)、notifyItemMoved(int)、notifyItemRemoved(int)局部刷新, 查看详情

不同页面之间实现参数传递的几种方式

...,可以有一下几种方式:方式一:表单方式传递表单传递参数是一种最简单,也是最基本的参数传递方式。注意:表单元素隐藏按钮的使用 方式二:带参数的url方式传递带参数的url写法:url?参数名1=值1&参数名2=值2 方... 查看详情

request获取数据的几种方法

1、request.getparameter(); 1//只接收前台穿过来的一个指定的参数2Stringvalue=request.getparameter("key"); 2、request.getParameterMap(); 说白了前端提交到Servlet或者Action里面的参数Map,如果你是以表单提交,那么request.getParameterMap() 查看详情

关于不同页面之间实现参数传递的几种方式讨论

参考技术A不同页面之间实现参数传递的几种方式讨论(黎声)由于web系统采用http协议在浏览器和服务器之间传输数据,而http协议是一种无状态的协议,如何在不同页面之间传递数据,可以有一下几种方式方式一:表单方式传递... 查看详情

草的交互的几种实现

基本原理都差不多,通过在VertexShader种更改顶点的位置实现,各种做法的差别主要是偏移量的计算.第一种做法:根据顶点的UV来计算顶点偏移的权重,因为草叶一般是沿纹理的一个轴方向分布的.偏移的远近是根据顶点位置和玩家位置(... 查看详情

常见的几种锁(代码片段)

...来的两倍(假设线程一执行完第一句等待,线程二将两句全部执行完,这时线程一如果继续执行则会脏读数据)   使用悲观锁则通过在其后加forupdate后,仅允许一个连接 查看详情