【问题标题】:Extracting original email and remove email alias in emails提取原始电子邮件并删除电子邮件中的电子邮件别名
【发布时间】:2021-12-23 11:02:51
【问题描述】:

我正在尝试从别名中获取主要电子邮件,例如,我有以下示例,我需要对它们进行规范化。

  1. 从“test.me@email.com”到“testme@email.com”
  2. 从“test+me11@email.com”到“test@email.com”
  3. 从“test.me.123+22@email.com”到“testme123@email.com”
  4. 从“test+123@email.com”到“test@email.com”

我在 bigquery 上编写了一条 SQL 语句,但收到一条错误消息,提示“SUBSTR() 中的第三个参数不能为负数”

SELECT  TRANSLATE(SUBSTR('test+123@email.com', 1, INSTR('test+123@email.com', '+')-1),'+.', '') ||'@' || SUBSTR('test+123@email.com', Instr('test+123@email.com','@')+1)

对上述内容的任何想法或建议或使用 regex_replace 的想法

谢谢

【问题讨论】:

  • 在“我有以下电子邮件”之后,您会显示一个与电子邮件地址不同的列表(因为> 不是电子邮件地址中的有效字符)。请edit您提问,让我们知道您对 "A > B" 的含义,其中 A 和 B 都是有效的电子邮件地址
  • 我编辑了这个问题,我的意思是 A>B A(包含别名的电子邮件)B(没有别名的电子邮件)
  • 您正在更改电子邮件地址,而不是对其进行规范化。电子邮件地址“abc.def@example.com”与“abcdef@example.com”是不同的地址(不一定是它的别名)
  • 你说得对,我应该更清楚,例如,如果是 Gmail,那么点无关紧要,如果是 gmail,我想要这项工作

标签: sql google-bigquery


【解决方案1】:

考虑以下方法

select email, 
  regexp_replace(email, r'([^+@]+)+?([^@]*(.*))', r'\1\3') original_email
from your_table             

如果应用于您问题中的样本数据 - 输出是

如果出于某种原因您想要移除点 - 请在下方使用

select email, original_email,
  format('%s@%s', 
    replace(split(original_email, '@')[offset(0)], '.', ''), 
    split(original_email, '@')[offset(1)]
  ) with_stripped_dots
from your_table, 
unnest([regexp_replace(email, r'([^+@]+)+?([^@]*(.*))', r'\1\3')]) original_email             

有输出

【讨论】:

  • 谢谢米哈伊尔,这正是我想要的
【解决方案2】:

也许你可以试试正则表达式,但我不确定性能是好是坏。

select CONCAT(REGEXP_EXTRACT("test.me+123@email.com", r'([\w\.]+)'), REGEXP_EXTRACT("test.me+123@email.com", r'(@[\w\.]+)'))

【讨论】:

    【解决方案3】:

    您似乎试图通过使用 (``) 来替换 +. 字符:

    TRANSLATE(SUBSTR('test+123@email.com', 1, INSTR('test+123@email.com', '+')-1),'+.', '')
    

    这不起作用,因为使用 TRANSLATE() 的第二个和第三个参数应该具有相同的长度。

    也许你想做(对于@之前的部分):

    REPLACE(REPLACE(LEFT('test+123@email.com',INSTR('test+123@email.com','@')-1),'+',''),'.','')
    

    【讨论】:

    • 谢谢,没错,我还需要删除加号后面的任何字符
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    相关资源
    最近更新 更多