帆软分组合并字符串、提取字符串中的数字、判断多项字符串至少一项被包含

分组合并字符串

1. 问题描述编辑

 

在针对数字类型的数据时,我们有分组求和,求最大最小值等操作。

而在处理字符串类型的数据时,有时我们也需要将同分组的数据合并拼接到一起,实现效果如下图:

222

 

2. 解决方案编辑

 

利用报表设计器的功能实现或是利用相关数据库的函数来实现。

3. 示例

3.1 通过设计器实现

1)数据集

添加数据集ds1,sql语句为:SELECT * FROM 部门

2)模板设置

将字段拖进相应的单元格中,模板设置如下:

222

3)单元格属性

选择B1单元格,右击选择“扩展”,将B1单元格扩展方向设置为“不扩展”,如下图所示:

222

4)保存预览

保存预览,即可上图所示效果。

SQL方法

SELECT   dudao,STUFF(( select','+ khmc from kehu  a where a.dudao=b.dudao  for xml path('')), 1, 1,'')  as mc
from kehu b
group by dudao

-----------------------------

SELECT   STUFF(( select','+ khmc from kehu  a  for xml path('')), 1, 1,'')

其他数据库方法

1)Oracle数据库

 

  1. select   
  2. 总部门,  
  3. wmsys.wm_concat(部门名称) as 部门名称  
  4. from 部门  
  5. group by 总部门  

3)mysql数据库

 

  1. select   
  2. 总部门,  
  3. group_concat(部门名称)   
  4. from 部门   
  5. group by 总部门  

有时候我们希望从目标字符串中提取出所有的数字,重新组合成一个字符串,如下图所示:
222

-----------------------------------------

先将字符串分割成数组,再对数组每一项进行筛选,保留下数字,最后以字符串输出。

3.解决步骤编辑

1)先利用split( )函数进行分割,这里要分割每一项,所以分割符为空:split(目标字符串,"")
222

 

2)利用GREPARRAY( )函数对上一步结果进行筛选,这里使用了regexp( )函数来判断是否是数字:GREPARRAY(上一步结果, regexp(item, "[0-9]"))
222
3)使用JOINARRAY( )函数将数组以字符串方式输出,拼接符为空:JOINARRAY(上一步结果, "")
222

4)综合起来,公式就是JOINARRAY(GREPARRAY(split(目标字符串, ""), regexp(item, "[0-9]")), "")
222

------------------------------------

判断多项字符串至少一项被包含

 

1.问题描述

有时候我们要判断一个多项字符串是否至少有一项被另外个字符串包含。

如:有一批货原本是属于"A供货商,B供货商"的,结果却被"B供货商,C供货商"拼车拉走了。

这批货有没有出问题呢,只要判断"A供货商,B供货商"中是否至少有一项在"B供货商,C供货商"中,如果有就没问题。

222

2.解决思路

将两个字符串都转化为数组,判断一个数组的每一项是否存在其中一项在另外个数组中,如果有,则包含,否则不包含。

3.解决步骤

1)将字符串1分割成数组:SPLIT(字符串1,",")

222

2)确保第二个字符串转化为数组:IF(FIND(",", 字符串2) > 0,SPLIT(字符串2,","), ARRAY(字符串2))

这是因为字符串2中如果没有分隔符,则SPLIT(字符串2,",")的结果还是一个字符串。

字符串1就算没转化成功也能参与后面的运算,就不强制。

222

3)判断字符串1转化的数组的每一项是否存在字符串2数组中:GREPARRAY(字符串1数组, INARRAY(item, 字符串2数组) > 0)

这里使用了 INARRAY( )函数来判断是否存在, INARRAY( )的第二个参数一定要是数组,这就是第二步需要强制转化的原因。

222

4)判断上一步结果的项数,项数大于0则包含,否则不包含:IF(LEN(上一步结果)>0,"包含","不包含")

222

5)综合判断公式为:IF(LEN(GREPARRAY(SPLIT(字符串1,","), INARRAY(item, IF(FIND(",", 字符串2) > 0, SPLIT(字符串2,","), ARRAY(字符串2))) > 0)) > 0, "包含", "不包含")

222

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值