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(...)
在substr
或regexp_substr
调用之前。如果您想确保处理的是 url 而不是123=4567890
,则正则表达式很有用
接受了这个,因为它更健壮,在我的系统上具有相同的性能,并且可以处理更多的混乱!以上是关于oracle DB - 加入杂乱的字符串的主要内容,如果未能解决你的问题,请参考以下文章
从 DB2 和 Oracle 角度看 CLOB 和 BLOB 的区别?