Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 提取文本字段中两个单词之间的文本_Mysql - Fatal编程技术网

Mysql 提取文本字段中两个单词之间的文本

Mysql 提取文本字段中两个单词之间的文本,mysql,Mysql,我需要在文本字段中两个单词的第一次出现之间获取文本(无论内容如何) 这些单词将由用户在Mysql脚本开始时设置为变量,并且可能会更改每次执行 SET @begin = 'DOLOR'; SET @end = 'AETERNAM'; 在下面的模拟文本中 lorem ipsum DOLOR sit amet requiem in AETERNAM domine eis kyrie eleison. 我希望能够在中提取sit amet安魂曲,而不带尾随或前导空格。您可以通过嵌套调用substri

我需要在文本字段中两个单词的第一次出现之间获取文本(无论内容如何)

这些单词将由用户在Mysql脚本开始时设置为变量,并且可能会更改每次执行

SET @begin = 'DOLOR';
SET @end = 'AETERNAM';
在下面的模拟文本中

 lorem ipsum DOLOR sit amet requiem in AETERNAM domine eis kyrie eleison.

我希望能够在中提取
sit amet安魂曲,而不带尾随或前导空格。

您可以通过嵌套调用
substring\u index()
来实现这一点:

SET @begin = 'DOLOR';
SET @end = 'AETERNAM';
SELECT       
   TRIM(SUBSTRING(
                     input,
                     (LOCATE(@begin,input)+LENGTH(@begin)),
                     (LOCATE(@end,input)-LOCATE(@begin,input)-LENGTH(@begin))
                 ))
   AS textbetween
FROM (SELECT 'lorem ipsum DOLOR sit amet requiem in AETERNAM domine eis kyrie eleison.' AS input) subq;
编辑:

您也可以这样做:

select substring_index(substring_index(mock, @end, 1), @begin, 2)
逻辑(对于第一个版本)是:使用
@begin
根据
@begin
将字符串分成几段。您想要第二块(在
@begin
之后)。然后在
@end
之前取第一块


我意识到,如果
@begin
多次出现在
@end
之前(幸运的是,问题中没有提到这一点),这两个选项都会出现问题。如果出现这种情况,那么
子字符串索引()
不是最好的方法。

我想你的意思是
子字符串索引(子字符串索引(mock,@end,1),@start,1)
@Stephan。您的版本将占据
@begin
之前的字符串部分。请参阅edit.ur right,但您的第一个版本仍然不正确。。。请执行这些以检查
选择子串索引(子串索引('lorem ipsum DOLOR sit amet Reem in AETERNAM domine eis kyrie eleison','DOLOR',2),'AETERNAM',1)联合选择子串索引(子串索引('lorem ipsum DOLOR sit amet Reem in AETERNAM domine eis kyrie eleison','AETERNAM',1),-1)
BTW sqlfiddle已关闭
select substring_index(substring_index(mock, @end, 1), @begin, 2)