FineReport中如何实现多个字段以‘/’符号拼接,当字段为空即不显示拼接符

问题:

用‘/’拼接符号,拼接字段A至字段E,当某个字段值为空时,不使用拼接符

原数据:

  A              B               C              D            E

中国         null           上海市     宝山区    汶水路

中国       湖北省        武汉市       null         null

null         江苏省         null           null         null

拼接后效果

中国/上海市/宝山区/汶水路

中国/湖北省/武汉市

江苏省

   

字段A至字段B在表上其实不用展示,只需要展示拼接后的内容即可。在oracle数据库里我尝试用A||'/'||B||'/'||C||'/'||D||'/'||E这种方式拼接,但字段为空的时候就有很多多余的/拼接符,因为需要拼接在一起的字段很多,又不能一个个去逐一做判断

 

以上,求解

FineReport 用户H5691967 发布于 2021-3-9 14:53 (编辑于 2021-3-9 14:56)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
2
snrtuemcLv8专家互助
发布于2021-3-9 14:59(编辑于 2021-3-9 15:08)

假设在A1到E1单元格

CONCATENATE(if(len(A1)=0,"",A1),if(len(B1)=0,"","/"+B1),if(len(C1)=0,"","/"+C1),if(len(D1)=0,"","/"+D1),if(len(E1)=0,"","/"+E1))

完善下,防止前面为空

CONCATENATE(if(len(A1)=0,"",A1),if(len(B1)=0,"",if(len(A1)=0,B1,"/"+B1)),if(len(C1)=0,"",if(len(B1)=0,C1,"/"+C1)),if(len(D1)=0,"","/"+D1),if(len(E1)=0,"","/"+E1))

image.png

image.png

  • 用户H5691967 用户H5691967(提问者) 多谢!
    2021-03-09 15:14 
  • 用户H5691967 用户H5691967(提问者) 我又给完善了一下。 假设拼接G2到M2单元格: CONCATENATE( if(len(G2) = 0, \"\", G2), if(len(H2) = 0, \"\", if(len(G2) = 0, H2, \"/\" + H2)), if(len(I2) = 0, \"\", if(len(G2+H2) = 0, I2, \"/\" + I2)), if(len(J2) = 0, \"\", if(len(G2+H2+I2) = 0, J2, \"/\" + J2)), if(len(K2) = 0, \"\", if(len(G2+H2+I2+J2) = 0, K2, \"/\" + K2)), if(len(L2) = 0, \"\", if(len(G2+H2+I2+J2+K2) = 0, L2, \"/\" + L2)), if(len(M2) = 0, \"\", if(len(G2+H2+I2+J2+K2+L2) = 0, M2, \"/\" + M2)) )
    2021-03-09 16:39 
最佳回答
0
177741977Lv6初级互助
发布于2021-3-9 15:00(编辑于 2021-3-9 15:10)
最佳回答
0
krystal033Lv7高级互助
发布于2021-3-9 15:06
select  replace(replace('中国'||'/'||null||'/'||null||'/'||'宝山区'||'/'||'汶水路','//','/'),'///','/')  from dual

如果字段就几个的话可以这样处理

最佳回答
0
AmyQLv6初级互助
发布于2021-3-9 15:07

select A1||B1||C1||D1||E1 from(

    select case when A is null then '' else A||'/' end A1,

              case when B is null then '' else B||'/' end B1,

              case when C is null then '' else C||'/' end C1,

              case when D is null then '' else D||'/' end D1,

              case when E is null then '' else E end E1

              from table

      )table1

  • 用户H5691967 用户H5691967(提问者) 因为一共有7个字段需要拼接在一起成为一个字段,用case when 的话就要做好多判断,所以太麻烦了。不过还是谢谢啦~
    2021-03-09 15:16 
最佳回答
0
linbodingLv6中级互助
发布于2021-3-9 15:10

select replace("中国//上海市/宝山区/汶水路","//","/") as xx

按你的拼接完成后,出现以上情况,做个replace  把//替换成/  就可以了

  • 用户H5691967 用户H5691967(提问者) 这个我之前也试过,但是一共7个字段拼接成一个字段,有的七个字段都是空值,有的一连三五个字段是空值,所以会出现‘////’或者 ‘///’ 或者‘////’或‘//’等等这种情况,还有因为第一个拼接的字段和最后拼接那个字段都是空值,导致开始和结尾都有一个多余‘/’拼接符的情况也需要去掉,用replace并不能一下替换到位
    2021-03-09 15:26 
  • 6关注人数
  • 764浏览人数
  • 最后回答于:2021-3-9 15:10
    请选择关闭问题的原因
    确定 取消
    返回顶部