【问题标题】:oracle DB - joining with a messy stringoracle DB - 加入杂乱的字符串
【发布时间】:2017-09-22 10:24:57
【问题描述】:

我正在尝试在 oracle 中加入两个表:

表 1

Jira ID|bugz url(string)
-------|---------
1234   |http-url-897654
1235   |http-url-158974
1236   |http-url-158975\nhttp-url-158972

表 2

BUG_ID(int)|Stuff
-------|---------
897654 |Stuff
158974 |Stuff
158975 |Stuff

我想使用尽力匹配将表 2 连接到表 1。 BUG_ID 总是 7 位数字,表 1 中的 URL 是一个字符串,但我很高兴只使用“有效”字符串,它是一个以以下结尾的 URL:

https://example.com/show_bug.cgi?id=1958615 <-- this is the BUG_ID

【问题讨论】:

    标签: sql regex oracle


    【解决方案1】:

    怎么样:

    select ...
      from table1
           join table2
                on substr(table1.bugz_url, -7) = to_char(table2.bug_id);
    

    【讨论】:

    • 成功了!非常简单!我想太多了,因为 bugz url 字符串没有经过验证,里面有一堆废话,但是是的,如果我这样做,它要么匹配要么不匹配!谢谢!哈,我正在使用正则表达式和所有东西创建临时行。
    • 我总是喜欢想不到的事情!
    【解决方案2】:

    如果您正在寻找 url,请说

      http(s): ... ?id=7_DIGITS_BUG_NUMBER
    

    你可以试试正则表达式,如果是Oracle的话regexp_substr:

       select ...
         from table1 join table2
           on regexp_substr(table1.bugz_url, '^https?:.*\?id=([0-9]{7})$', 1, 1, null, 1) =
               to_char(table2.bug_id)
    

    【讨论】:

    • 这行得通,如果人们最终放入试验空间和 url 锚点 #c4,可能会打赌常规子字符串匹配,谢谢!
    • @Rqomey:如果是尾随空格,只需修剪它们:rtrim(...) 在substr 或regexp_substr 调用之前。如果您想确保处理的是 url 而不是123=4567890,则正则表达式很有用
    • 接受了这个,因为它更健壮,在我的系统上具有相同的性能,并且可以处理更多的混乱!
    猜你喜欢
    • 1970-01-01
    • 2021-09-14
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 2018-10-21
    • 2015-07-23
    相关资源
    最近更新 更多