oracle DB - 加入杂乱的字符串

Posted

技术标签:

【中文标题】oracle DB - 加入杂乱的字符串【英文标题】:oracle DB - joining with a messy string 【发布时间】: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

【问题讨论】:

【参考方案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(...)substrregexp_substr 调用之前。如果您想确保处理的是 url 而不是123=4567890,则正则表达式很有用 接受了这个,因为它更健壮,在我的系统上具有相同的性能,并且可以处理更多的混乱!

以上是关于oracle DB - 加入杂乱的字符串的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 11g DB 返回流而不是字符串

Oracle db:如何在字符串的特定位置添加空格

实体框架和字符串作为 Oracle Db 中的 CLOB

从 DB2 和 Oracle 角度看 CLOB 和 BLOB 的区别?

Access 2003 - VBA - 加入两种类型(字符串 = 日期)

使用流利的 Nhibernate 插入时,Oracle DB 法语字符将替换为垃圾值