提取原始电子邮件并删除电子邮件中的电子邮件别名
Extracting original email and remove email alias in emails
我正在尝试从别名获取主要电子邮件,例如,我有以下示例,我需要对其进行规范化。
- 从“test.me@email.com”到“testme@email.com”
- 从“test+me11@email.com”到“test@email.com”
- 从“test.me.123+22@email.com”到“testme123@email.com”
- 从“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 的想法
谢谢
您似乎试图通过注释 (``) 来替换 +
和 .
字符:
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),'+',''),'.','')
也许你可以试试正则表达式,但我不确定性能是好是坏。
select CONCAT(REGEXP_EXTRACT("test.me+123@email.com", r'([\w\.]+)'), REGEXP_EXTRACT("test.me+123@email.com", r'(@[\w\.]+)'))
考虑以下方法
select email,
regexp_replace(email, r'([^+@]+)+?([^@]*(.*))', r'') 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'')]) original_email
有输出
我正在尝试从别名获取主要电子邮件,例如,我有以下示例,我需要对其进行规范化。
- 从“test.me@email.com”到“testme@email.com”
- 从“test+me11@email.com”到“test@email.com”
- 从“test.me.123+22@email.com”到“testme123@email.com”
- 从“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 的想法
谢谢
您似乎试图通过注释 (``) 来替换 +
和 .
字符:
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),'+',''),'.','')
也许你可以试试正则表达式,但我不确定性能是好是坏。
select CONCAT(REGEXP_EXTRACT("test.me+123@email.com", r'([\w\.]+)'), REGEXP_EXTRACT("test.me+123@email.com", r'(@[\w\.]+)'))
考虑以下方法
select email,
regexp_replace(email, r'([^+@]+)+?([^@]*(.*))', r'') 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'')]) original_email
有输出