mysql - 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 个字符,但我不知道要让它动态到电子邮件后缀的结尾。
如何隔离字段内的电子邮件地址?
解决方案
通过使用后续键的位置来定义我的端点(加上一点调整)得到它:
select substring(`fieldname`, locate("key1", `fieldname`) + 9,
locate("key2", `fieldname`) - locate("key1", `fieldname`) - 12)
as 'Customer Email'`
from table
推荐阅读
- kotlin - Kotlin Room Query 返回按另一个值分组的实体值
- java - Java黄瓜Selenium:NullPointerException for scenario.write for the first scenario on before tag
- r - 由于缺少依赖项,R 包未能在 r-devel 窗口上进行 CRAN 检查
- sql-server - SQL Server:我想获取该值所属的行
- c++ - 可以调用 myfunc(make_shared
(0)) 到接收weak_prt 的函数? - python - openpyxl 在不同操作系统中的行为不同
- php - 从 forEach 循环 PHP 中的最后一个元素中删除逗号
- openmodelica - 在 OpenModelica 中建模 RLC。错误 - 复杂和真实之间的类型不匹配
- c# - 如何在 C# 中为 gRPC 创建正确的自动生成代码?
- rx-java - RxJava 从多个源接收数据包并写入 OutputStream,每个数据包之间存在延迟