首页 > 解决方案 > SQL获取字段中间的字符

问题描述

在我的表中,我有一个实际上是一个数组的字段,其中所有条目的结构都为 {"key1": value1, "key2": value2...}

我需要根据其中一个键“电子邮件”进行一些分析,但由于长度是可变的,因此无法弄清楚如何在查询中仅返回电子邮件地址。子字符串的开头可以预见在“email”(包括引号)之后,结尾可以预见是“.com”(不包括引号)。

现在我的查询看起来像这样:

select substring(`fieldname`, locate('"email"', `fieldname`) + 9, 20) 
as 'Customer Email' 
from table 
where `fieldname` in ('email_processed', 'email_delivered')

所以我得到了地址开头后的 20 个字符,但我不知道要让它动态到电子邮件后缀的结尾。

如何隔离字段内的电子邮件地址?

标签: mysqlsubstring

解决方案


通过使用后续键的位置来定义我的端点(加上一点调整)得到它:

select substring(`fieldname`, locate("key1", `fieldname`) + 9, 
locate("key2", `fieldname`) - locate("key1", `fieldname`) - 12) 
as 'Customer Email'` 
from table 

推荐阅读