美文网首页
postgres 截取github pr字符串

postgres 截取github pr字符串

作者: jaymz明 | 来源:发表于2022-07-11 19:57 被阅读0次

sql截取字符串这么奇怪的需求?
原因是我们的pr和master build每次运行都会产生大量的数据。我们将这部分数据存在关系型数据库里。为了日后方便进行统计和甄别pr的质量,是否引入regression。
由于pr采用的是webhook的方式,定制化了各种触发的参数,比如:run,run-ui, build等等。一旦用户输入了这几种comment,jenkins就会自动运行构建脚本。与此同时,我们也将用户的行为记录下来。
研究过github api的人一定知道,api中携带了大量的信息,包括pr的owner,组织,reviewer等等。虽然是json格式的。我们存储的时候,还是一股脑的存的text。一方面是快捷,而且不需要过多的考虑占用的字段长度。虽然存储的时候开心了,但是当我们想把其中的数据抽取出来的时候Orz,太难受了。巨长的json串还是array类型的。
没有办法,无法使用postgres自带的解析json串的函数,具体可参考http://www.postgres.cn/docs/12/datatype-json.html
我们的问题在于,怎样从一堆巨长的json串中,抠出我们想要的comment。没办法,截取字符串吧。

position 函数,SELECT POSITION('Tutorial' IN 'GeeksForGeeks Tutorial');

简单用法就是在字符串里找出我需要截取的值。 类似于如下

image.png

我的json由于比较大,且是一个数组串,根据一般的key来获取值,并不能达到要求。因为key可能都是一样的name。
所以我们通过识别性比较大的值:ghprbCommentBody,其中一部分信息是这样的:

{"name":"ghprbCommentBody","value":"run only-build"},

且value的值是动态变化的。
因此可以通过position来截取。首先定位到ghprbCommentBody,

            POSITION (
            'ghprbCommentBody' IN b."parameters"
            ) FOR 50

取出长度为50。
然后拿到了小部分的值,再在这个基础上进一步截取,

image.png

会发现结果变成这样

image.png

接下来就需要对子串进行截取,去除引号,以及不相关的键值。

TRIM (
        TRAILING '"'
        FROM
            TRIM (
                LEADING ':"'
                FROM
                    TRIM (
                        LEADING '"ghprbCommentBody","value"'
                        FROM
                            SUBSTRING (
                                b."parameters"
                                FROM
                                    POSITION (
                                        '"ghprbCommentBody' IN b."parameters"
                                    ) FOR POSITION (
                                        '}' IN SUBSTRING (
                                            b."parameters"
                                            FROM
                                                POSITION (
                                                    'ghprbCommentBody' IN b."parameters"
                                                ) FOR 50
                                        )
                                    )
                            )
                    )
            )
    ) AS "parameters"

LEADING 表示从头部开始。这样就达到了我们的预期

image.png

相关文章

  • postgres 截取github pr字符串

    sql截取字符串这么奇怪的需求?原因是我们的pr和master build每次运行都会产生大量的数据。我们将这部分...

  • Python

    切片 print str[0:3] #截取第一位到第三位的字符print str[:] #截取字符串的全部字符pr...

  • 字符串处理

    项目地址 https://github.com/pkgogai/GYDFoundation 安全的字符串截取 系统...

  • mac 终端常见命令

    切换shell 截取字符串 shell字符串的截取 shell字符串的截取 Shell脚本8种字符串截取方法总...

  • swift-字符串截取 截取指定字符前面或后面的字符串

    截取‘:’前面所有的字符串 截取‘:’前面所有的字符串(结果包含‘:’) 截取':'后面的所有字符串 截取':'后...

  • iOS 字符串常见处理

    一、截取字符串 iOS “字符串” 的几种常见的截取方法(随时更新)iOS截取字符串,分割字符串iOS 截取字符串...

  • OC - NSString

    1.字符串的截取 字符串的截取用: 字符串 +substring..如果开始就截取用from, 如果截取到用to。...

  • OC 字符串的截取

    1、字符串截取 2、从指定位置开始截取n个长度 3、分隔字符串 4、字符串的截取替换 5、替换掉截取某部分的字符串...

  • Swift字符串截取

    NSString类型的字符串截取 NSString类型的字符串截取方法,同于OC语言的字符串截取方法,不能修改字符...

  • MySQL字符串截取的4个函数

    mysql字符串截取的4个函数 tags:mysql 字符串截取 1、从左开始截取字符串 left(str, le...

网友评论

      本文标题:postgres 截取github pr字符串

      本文链接:https://www.haomeiwen.com/subject/kouvbrtx.html