长字符串的字段数据分类提取的方法

一个字段里的数据如下:

[{"name":"地点","itemType":"input","itemId ":"217474","itemValue":"爵士鞋行门头上方"},{"name":"图片","itemType":"image","itemId ":"898808","itemValue":["https://aa.com/uploadfile/Pictures/2022/3/28/382c66a75a614768a48670697f85a132.jpg","https://aa.com/uploadfile/Pictures/2022/3/28/57cac58516714409a38bd1068eaea480.jpg"]},{"name":"整改时间","itemType":"time","itemId":"124470","itemValue":"2022/03/28 16:25"}]

用FR如何处理才能提取出相应的数据?我主要是想提取https:后面哪两个网址,但这个网址是不固定个数的,可能是1个也可能是3个4个。

FineReport 章鱼哥48030 发布于 2022-5-16 10:38
1min目标场景问卷 立即参与
回答问题
悬赏:5 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
CD20160914Lv8专家互助
发布于2022-5-16 12:10(编辑于 2022-5-16 15:52)

假如你上面的这部分数据在A1单元格,公式如下,然后再设置单元格为横向扩展

MAPARRAY(MAPARRAY(GREPARRAY(split(A1, ","), find("https:", item) > 0),mid(item,find("https",item),1000)),mid(item,1,find(".jpg",item)+3))

image.png

如果你是oracel,那么可以这样

select 

REGEXP_SUBSTR(t2.str,'http(s://)\w+\.+\w.+\.jpg') as 截取后

from (

select

NVL(REGEXP_SUBSTR(t.tstra, '[^,]+', 1, LEVEL, 'i'), '无') AS STR

 from (

select '[{"name":"地点","itemType":"input","itemId ":"217474","itemValue":"爵士鞋行门头上方"},{"name":"图片","itemType":"image","itemId ":"898808","itemValue":["https://aa.com/uploadfile/Pictures/2022/3/28/382c66a75a614768a48670697f85a132.jpg","https://aa.com/uploadfile/Pictures/2022/3/28/57cac58516714409a38bd1068eaea480.jpg"]},{"name":"整改时间","itemType":"time","itemId":"124470","itemValue":"2022/03/28 16:25"}]' as tstra from dual

) t

CONNECT BY LEVEL <=

LENGTH(t.tstra) - LENGTH(REGEXP_REPLACE(t.tstra, ',', ''))+1

) t2

where regexp_like(t2.str,'https.*')

image.png

  • 章鱼哥48030 章鱼哥48030(提问者) 厉害,SQL居然能这么写,谢谢了。
    2022-05-16 15:58 
  • CD20160914 CD20160914 回复 章鱼哥48030(提问者) oracel里面的正则强大。。。
    2022-05-16 15:58 
最佳回答
0
Z4u3z1Lv6专家互助
发布于2022-5-16 10:41
  • 章鱼哥48030 章鱼哥48030(提问者) 这个数据目前是存放于数据库的一个字段里,怎么建立联接去取才好呢?
    2022-05-16 14:16 
  • Z4u3z1 Z4u3z1 回复 章鱼哥48030(提问者) 如果不介意请用楼下的方法。如果介意请把数据库名说出来(SqlServer?mysql?oracle)
    2022-05-16 14:19 
  • 章鱼哥48030 章鱼哥48030(提问者) 回复 Z4u3z1 楼下的是最后方法了,我想更简便一点的。我的数据库是oracle,版本是12c
    2022-05-16 14:21 
  • Z4u3z1 Z4u3z1 回复 章鱼哥48030(提问者) 抱歉了oracle不怎么会,SqlServer可以建一个表值函数处理,你看看oracle可以不
    2022-05-16 14:25 
  • 章鱼哥48030 章鱼哥48030(提问者) 回复 Z4u3z1 谢谢了,这个我也不会,我是菜鸟。55。
    2022-05-16 15:57 
最佳回答
0
FryangLv3见习互助
发布于2022-5-16 15:33

image.png

image.png

可以用公式提取         = GREPARRAY(SPLIT(A1, '"'),STARTWITH(item,'https'))

数据都是用“” 引起的,所以先用split将字符串分割成数组

再用greparray过滤形成新的数组,条件是以"https"开头

  • 3关注人数
  • 410浏览人数
  • 最后回答于:2022-5-16 15:52
    请选择关闭问题的原因
    确定 取消
    返回顶部