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字符串操作函数.
看起来你不能用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然后解决这个问题.
但正则表达式更容易......
| 归档时间: |
|
| 查看次数: |
3432 次 |
| 最近记录: |