zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    BZOJ1257:[CQOI2007]余数之和——题解+证明
    BZOJ3781:小B的询问——题解
    BZOJ2038:[2009国家集训队]小Z的袜子——题解
    BZOJ3052 & UOJ58:[WC2013]糖果公园——题解
    BZOJ1086:[SCOI2005]王室联邦——题解
    BZOJ1878:[SDOI2009]HH的项链——题解
    BZOJ2453:维护队列——题解
    美团新零售招聘-高级测试开发(20k-50k/月)
    Shopee招聘-测试开发leader(30k-60k/月)
    蚂蚁金服招聘-无线测试开发(20k-36k/月)
  • 原文地址:https://www.cnblogs.com/fxck/p/13076595.html
Copyright © 2011-2022 走看看