Select all unique emails inside a column filled wi

2019-09-10 02:42发布

问题:

I have a column's field filled with all kinds of data from a user request (one request per row).

I only need the email addresses from these users' requests, and they are all placed in this column according to the following format:

[...data...] Email: mysql@se.com Phone: [...remaining data...]

I have found this question:

select part of table column data in mysql

Which provides a solution for part of the problem:

SELECT SUBSTR(message,INSTR(message,'Email: ')+7) FROM user_req_log

However, this will return all the unwanted remaining data.

What's the most efficient way to confine the results to the strings I need (email addresses) and, at the same time, ignore duplicates?

回答1:

Based on that question's solution, you may simply do:

SELECT DISTINCT SUBSTR(message,
                       @ini_pos:=INSTR(message,'Email: ')+7,
                       INSTR(message,' Phone:')-@ini_pos)
FROM `user_req_log`

It may not be the most efficient way, but it's fairly similar:

  • use the three parameters of SUBSTRING(str,pos,len);
  • get the positions before and after the email address through INSTR(str,substr) or LOCATE(substr,str)/POSITION(substr IN str).
  • assign a variable for the email's initial position (@ini_pos) and reuse it to subtract from the position where you know it ends;
  • use DISTINCT to return each email only once.