首页 > 解决方案 > 在由换行符分隔的文本中查找文本

问题描述

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

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

我查看了 MID 函数,但由于教育值不同,长度不是标准的。我已经搜索了 MySQL 字符串函数,但没有找到允许我在两个位置之间搜索的解决方案,包括一个由正则表达式字符定义的位置——正则表达式只是提供匹配,而不是位置。

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

代码按预期执行,但由于 \n 换行符的固定长度而不是位置,结果要么被截断,要么包含来自后续文本的额外字符。

我猜有一种方法可以做到这一点,我只是没有找到。

标签: mysqlstringstring-search

解决方案


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

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

这让你Education line. 然后你只需:要从该字符串中提取后面的部分:

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

推荐阅读