SQL函数用于匹配URL的最后两部分

use*_*980 1 postgresql pattern-matching postgresql-8.3

这是一个跟踪问题,这里的帖子是Regex用于匹配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字符串操作函数.

Chr*_*our 8

看起来你不能用8.3功能集http://www.postgresql.org/docs/8.3/static/functions-string.html

没有逆转 - 这是9.1.你可以这样做:

select reverse(split_part(reverse(data), '.', 2)) || '.'
    || reverse(split_part(reverse(data), '.', 1))
from example;
Run Code Online (Sandbox Code Playgroud)

请参阅http://sqlfiddle.com/#!1/25e43/2/0

你可以声明你自己的反向:http://a-kretschmer.de/diverses.shtml然后解决这个问题.

但正则表达式更容易......