• Postgresql 字符串截取


    在一次数据迁移中,遇到的一个场景。需要从一串 JSON 中提取其中一段字符串。在 Bing 上搜索发现很少在 Postgresql 中用到字符串截取的。下面是解决的方法,不一定好,但恰好可以解决问题。

    JSON 字符串

    '{"item":{"id":"c0540d7e-bedb-4521-b2b1-401d099575d1","name":"这时一张图片.jpg","path":"5cbf3cff-4be0-4f82-b21a-34ccbb93e830/15a8164e-6244-4369-96bd-3fa5f6a24ff9/823b93f69867ad18501057e4312793dc.jpg","createdUserId":"5cbf3cff-4be0-4f81-b21a-34ccbb93e830","hash":"823b93f69867ad18501057e43e2793dc","createdUserName":"Admin","type":".jpg","size":47505408,"createdAt":"2019-05-25T11:54:33.5207074+08:00","url":"http://221.178.13.191:9021/5cbf3cff-4be0-4f81-b21a-34ccbb93e830/15a8164e-6244-4369-96bd-4fa5f6a24ff9/823b93f69867ad18501057e43e2793dc.jpg","completed":false,"tag":null,"tags":["BIM_MANAGER","500103","MUNICIPAL","CONSTRUCTION_APPLY_PHASE"]},"success":true}'

    原始信息如上,现在需要将粗体部分截取出来。用到时方法是 regexp_split_to_table,该方法可以将字符串分割成行。

    第一次执行(其中第二个参数的 E 是 Postgresql 正则的语法)

    SELECT regexp_split_to_table(JSON字符串, E',"path":"')

    图1

    可以看到第二行中已经出现了我们需要的结果了。但是还不能直接使用。于是。。。再截一次。

    第二次执行(得到最终结果)

    SELECT regexp_split_to_table
    (
    	regexp_split_to_table
    	(
    		JSON字符串, E',"path":"'
    	), 
    	E'.jpg",'
    ) 
    || '.jpg' 
    LIMIT 1 OFFSET 1;

    图2

    说明:

    1.第一层 regexp_split_to_table 得到两条数据如图1

    2.第二层 regexp_split_to_table 从第一层的第二条结果中继续截取,得到数据如图2

    3.图2中第二条数据就离最终结果非常接近了,所以再给字符串后面加上.jpg

    4.使用 LIMIT 1 OFFSET 1 语句获取第二条数据,就是最终的结果数据如图3

    图3

  • 相关阅读:
    CLAHE的实现和研究
    基于OpenVINO的端到端DL网络A Year in Computer Vision中关于图像增强系列部分
    基于OpenVINO的端到端DL网络Linux命令行上传文件到百度网盘
    linux动态加载动态三种方式
    Warning: Stopping docker.service, but it can still be activated by: docker.socket
    Kubent
    cad对象组合
    利用matlab求点到直线距离和垂足坐标
    matlab统计矩阵中每个元素出现的次数
    交通标志signal
  • 原文地址:https://www.cnblogs.com/fxck/p/13076595.html
Copyright © 2020-2023  润新知