在MySQL字段中查找特定的子字符串

时间:2014-01-10 20:28:25

标签: mysql substring locate

我有一个包含1列文本字段的数据库。我需要找到并安装一个具有特定子字符串的新列。我的英语不好,所以我将在下面解释。

1个字段的示例:

  

Lorem ipsum dolor sit amet,consectetuer adipiscing elit,sed diam   nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat   volutpat。 Ut wisi enim ad minim veniam,quis nostrud exerci tation   ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat。   Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse   molestie consequat,vel illum dolore eu feugiat nulla facilisis at    XXXX:yyyyy vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait   nulla facilisi。 Nam liber tempor cum soluta nobis eleifend选项   congue nihil imperdiet doming id quod mazim placerat facer possim   assum。 Typi non habent claritatem insitam;在iis中使用leusis   qui facit eorum claritatem。调查显示了lectores   legere me lius quod ii legunt saepius。 Claritas est etiam processus   动态的,qui sequitur mutem consuetudium lectorum。 Mirum est   notare quam littera gothica,quam nunc putamus parum claram,   anteposuerit litterarum formas humanitatis per seacula quarta decima   et quinta decima。 Eodem modo typi,qui nunc nobis videntur parum   clari,fiant sollemnes in futurum。

我需要查找并提取yyyyy之后的xxxx :的值,以及文本中变量的位置。到目前为止,我已经尝试过了:

SELECT 
 SUBSTRING_INDEX(
 RIGHT(description, 
 GREATEST(LOCATE('xxxx :', description),
 LOCATE('xxxx :', description))-1), ' ', -1)
FROM wwwww

我知道这可能是解决问题的方法,但我无法使其正常运作。 (我已经看过这个了:Return specific text from MySQL using LOCATE and SUBSTRING

PS:“XXXX:”它总是一样的... yyyyy有一个可变值

2 个答案:

答案 0 :(得分:2)

请试试这个

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(description,'XXXX : ',-1),' ',1) from wwwww

这是sqlFiddle

不确定为什么它不起作用,也许尝试这种变化看看是否有效

SELECT SUBSTRING_INDEX(RIGHT(post_content,LENGTH(post_content) - (LOCATE('XXXX : ',post_content)+6)),' ',1) as var from wp_posts

答案 1 :(得分:0)

使用PHP和正则表达式在文本块中查找xxxx :后面的第一个单词(或字符串)(可能有:周围有空格):

$subject = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit, vel illum dolore eu feugiat nulla facilisis at XXXX : yyyyy vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.";

# Case insensitive match.
$pattern = '/XXXX\s?:\s?(\w+)/i';

# If `XXXX` really has to be all caps, remove the `i` flag, like so:
#$pattern = '/XXXX\s?:\s?(\w+)/';

preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);
print_r($matches[1]);

$matched_text = $matches[1][0];
echo $matched_text;

$match_position = $matches[1][1];
echo $match_position;