Mysql 提取文本字段中两个单词之间的文本
我需要在文本字段中两个单词的第一次出现之间获取文本(无论内容如何) 这些单词将由用户在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
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)