这是对帖子Regex for matching last two parts of a URL
的跟进问题我想知道是否可以使用内置的sql函数来完成相同类型的模式匹配而不使用正则表达式。特别是我在想是否有办法将字符串反转为www.stackoverflow.com到com.stackoverflow.www然后应用连接到split('com.stackoverflow.www,'。',1)|| split('com.stackoverflow.www,'。',2)我会完成但我不确定这是否可行。
以下是一般性问题描述:
我试图弄清楚最好的sql函数只是匹配由a分隔的最后两个字符串。在网址中。
例如www.stackoverflow.com我只想匹配stackoverflow.com
我遇到的问题是某些字符串可能有很多句点,例如
a-abcnewsplus.i-a277eea3.rtmp.atlas.cdn.yimg.com
也应仅返回yimg.com
我正在使用的URL集合没有任何路径信息,所以可以假设字符串的最后一部分总是.org或.com或那种性质的东西。
当针对www.stackoverflow.com运行时,sql函数将返回stackoverflow.com,并且在上述条件下针对a-abcnewsplus.i-a277eea3.rtmp.atlas.cdn.yimg.com运行时将返回yimg.com ?我不想在解决方案中使用正则表达式只是sql字符串操作函数。
答案 0 :(得分:7)
看起来不像这样
没有反转 - 这是9.1。你可以这样做:
select reverse(split_part(reverse(data), '.', 2)) || '.'
|| reverse(split_part(reverse(data), '.', 1))
from example;
请参阅http://sqlfiddle.com/#!1/25e43/2/0
您可以声明自己的反向:http://a-kretschmer.de/diverses.shtml,然后解决此问题。
但正则表达式更容易......