我是一个相对较新的编码员,我几天来一直在努力解决以下问题。我试图在电子邮件地址的最后一段时间后分隔字符,以便我可以按照它们对结果进行分组。为了对@符号后的文本执行此操作,我编写了以下代码:
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中的子字符串。有没有人有任何其他建议?谢谢!
答案 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