试图找到非标准长度字符串中的最后一个字符

时间:2014-07-31 14:12:59

标签: postgresql substring

我是一个相对较新的编码员,我几天来一直在努力解决以下问题。我试图在电子邮件地址的最后一段时间后分隔字符,以便我可以按照它们对结果进行分组。为了对@符号后的文本执行此操作,我编写了以下代码:

select lower(substring(email, position('@' in email))) as email

此代码返回@ gmail.com或@ yahoo.com等内容,然后我可以在较长的查询中对其进行分组。但是,我还想将.com结果与.net结果进行比较。当我输入类似的查询时:

select lower(substring(email, position('.' in email))) as email

它返回电子邮件地址中的第一个句点。所以我的电子邮件将以.lastname @ gmail.com而不是.com的形式返回。我已经尝试了正确(和左(但,这些不适用于Postgresql中的子字符串。有没有人有任何其他建议?谢谢!

2 个答案:

答案 0 :(得分:4)

试试这个。诀窍是使用reverse来查找最后一段时间的位置。

<强> SQL Fiddle Example

select 
  substring(email, char_length(email) - position('.' in (reverse(email))) + 1) as Domain
from yourTable

答案 1 :(得分:0)

尝试类似:

select regexp_matches(email, '[^.]+$', 'g') 
from your_table