我的列字段中填充了用户请求中的各种数据(每行一个请求)。
我只需要这些用户的电子邮件地址'请求,它们都按照以下格式放在此列中:
[...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
但是,这将返回所有不需要的剩余数据。
什么是将结果限制在我需要的字符串(电子邮件地址)的最有效方法,同时忽略重复项?
答案 0 :(得分:0)
根据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)
或LOCATE(substr,str)
/ POSITION(substr IN str)
获取电子邮件地址前后的位置。@ini_pos
)分配变量
重复使用它从你知道它结束的位置中减去; DISTINCT
仅返回一封电子邮件。