我在其中一个表中有以下示例数据集:
sub1.domain.com
domain.com
sub1.sub2.domain.com
* .domain.com
更新
还包括ccTLD
* .domain.co.uk
在Oracle中是否有一种方法/正则表达式可以帮助我从字符串中提取域名 - “domain.com”。我一直在尝试一些正则表达式,但它可以解决问题。 谢谢你的帮助
答案 0 :(得分:1)
您可以使用以下正则表达式匹配字符串末尾的something_without_a_dot.something_without_a_dot。你会得到第一组的答案。如果您还需要TLD,则可以将()
中的所有内容括在$
之外。
([^.]+)\.[^.]+$
在SQL中,它给出了:
SQL> select regexp_replace('sub1.sub2.domain.com', '^.*?([^.]+)\.[^.]+$', '\1') from dual;
REGEXP
------
domain
开头的非贪婪.*?
允许您忽略字符串的开头。
获取域名加TLD:
SQL> select regexp_replace('sub1.sub2.domain.com', '^.*?([^.]+\.[^.]+)$', '\1') from dual;
REGEXP_REP
----------
domain.com
考虑co.uk
:
SQL> select regexp_replace('sub1.sub2.domain.co.uk', '^.*?([^.]+\.(co\.uk|[^.]+))$', '\1') from dual;
REGEXP_REPLA
------------
domain.co.uk
答案 1 :(得分:0)
当我输入我的答案时,上面的那个人给了一个很好的正则表达式。我想你可以在你的select语句中使用REGEXP_REPLACE。
REGEXP_REPLACE(fieldname, '([^.]+)\.([^.]+)$', '\1\.\2') as fieldname