regex MySQL正则表达式使用长度未知的SUBSTRING?

mefy6pfw  于 2023-10-22  发布在  Mysql
关注(0)|答案(3)|浏览(119)

假设我有这个数据:

First line of text etc etc
Second line of text here
  • 我想返回第一行,我知道它是如何开始的,但不知道它是如何结束的,只知道它以换行符结束。* 这是我到目前为止所做的:
SELECT
SUBSTRING(`file`, LOCATE('First line', `file`), LOCATE('First line', `file`)+10)
FROM `test`

这是可行的,除了+10不会总是+10。我需要知道的唯一标记是一个新行,但我认为在SUBSTRING中不可能使用正则表达式。有没有办法做到这一点?

8fsztsew

8fsztsew1#

试试这个:

SELECT 
      SUBSTRING( `file`, LOCATE('First line', `file`),
          LOCATE("\n",`file`) 
 FROM `test`
2ledvvac

2ledvvac2#

试试这个:

SELECT SUBSTRING(`file`, 1, LOCATE("\n", `file`) - 1) FROM `test`;

子串从1开始,而不是零。从LOCATE的结果中减去一,排除了行返回。

c90pui9n

c90pui9n3#

我认为你想返回一个以特定值开头的行;
所以我可以建议这样一个查询:

set @startOfLine = 'First line';

select 
  substring(`file`, 
            locate(@startOfLine, `file`),
            locate('\n', substring(concat(`file`, '\n'), locate(@startOfLine, `file`)))
  ) line
from `test`;

SQL Fiddle Demo

我在file的末尾添加了一个\n字符,这样你也可以得到最后一行。

相关问题