Select 填充数据的列中的所有唯一电子邮件
Select all unique emails inside a column filled with data
我有一个列的字段填充了来自用户请求的各种数据(每行一个请求)。
我只需要这些用户请求的邮件地址,他们都按照以下格式放在这一栏中:
[...data...] Email: mysql@se.com Phone: [...remaining data...]
我发现了这个问题:
select part of table column data in mysql
其中提供了部分问题的解决方案:
SELECT SUBSTR(message,INSTR(message,'Email: ')+7) FROM user_req_log
但是,这将 return 所有不需要的剩余数据。
将结果限制为我需要的字符串(电子邮件地址)并同时忽略重复项的最有效方法是什么?
基于question's solution,你可以简单地做:
SELECT DISTINCT SUBSTR(message,
@ini_pos:=INSTR(message,'Email: ')+7,
INSTR(message,' Phone:')-@ini_pos)
FROM `user_req_log`
这可能不是最有效的方法,但非常相似:
- 使用
SUBSTRING(str,pos,len)
的三个参数;
- 通过
INSTR(str,substr)
or LOCATE(substr,str)
/POSITION(substr IN str)
获取邮箱地址前后的位置。
- 为电子邮件的初始位置分配一个变量 (
@ini_pos
) 和
重新使用它从你知道它结束的位置减去;
- 使用
DISTINCT
来 return 每封电子邮件仅一次。
我有一个列的字段填充了来自用户请求的各种数据(每行一个请求)。
我只需要这些用户请求的邮件地址,他们都按照以下格式放在这一栏中:
[...data...] Email: mysql@se.com Phone: [...remaining data...]
我发现了这个问题:
select part of table column data in mysql
其中提供了部分问题的解决方案:
SELECT SUBSTR(message,INSTR(message,'Email: ')+7) FROM user_req_log
但是,这将 return 所有不需要的剩余数据。
将结果限制为我需要的字符串(电子邮件地址)并同时忽略重复项的最有效方法是什么?
基于question's solution,你可以简单地做:
SELECT DISTINCT SUBSTR(message,
@ini_pos:=INSTR(message,'Email: ')+7,
INSTR(message,' Phone:')-@ini_pos)
FROM `user_req_log`
这可能不是最有效的方法,但非常相似:
- 使用
SUBSTRING(str,pos,len)
的三个参数; - 通过
INSTR(str,substr)
orLOCATE(substr,str)
/POSITION(substr IN str)
获取邮箱地址前后的位置。 - 为电子邮件的初始位置分配一个变量 (
@ini_pos
) 和 重新使用它从你知道它结束的位置减去; - 使用
DISTINCT
来 return 每封电子邮件仅一次。