我正在尝试使用MySQL在文本中查找文本。我有一个值字段,该值有些是非结构化的,但是幸运的是,数据输入由新行分隔。我正在尝试查看是否可以提取“ Education”的值,该值基本上是一个子字符串,该子字符串在“ Education:”之后开始,并在以下数据中以\ n新行字符结束:

'Children:  5
Education:  College
Employment: Homemaker
Marital Status: Married'


我看过MID函数,但是由于教育的价值各不相同,因此长度不是标准的。我已经搜索过MySQL字符串函数,但是还没有找到一种解决方案可以让我在两个位置之间进行搜索,其中包括一个由正则表达式字符定义的位置-REGEX只是提供匹配项,而不是位置。

SELECT id,MID(value,POSITION('Education:' IN value),30)
FROM client_data


代码按预期执行,但是由于定长而不是\ n新行字符的位置,结果被截断或包含后续文本中的多余字符。

我想我没有找到一种方法来做到这一点。

最佳答案

您可以使用REGEXP_SUBSTR来获取与正则表达式匹配的实际字符串:

REGEXP_SUBSTR(value, '^Education:.*', 1, 1, 'm')


这使您获得Education line。然后,您只需要从该字符串中提取:之后的部分:

REGEXP_REPLACE(
  REGEXP_SUBSTR(value, '^Education:.*', 1, 1, 'm'),
  '^Education:', '')

10-08 05:19