Encontrar uma sub-cadeia de caracteres dentro do MySQL campo
Pergunta
Eu tenho um banco de dados com 1 coluna que tem campos de texto.Eu preciso de encontrar e montar uma nova coluna com uma subseqüência de caracteres.Meu inglês não é bom, então eu vou tentar explicar abaixo.
Exemplo 1 campo:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod resposta ut laoreet dolore magna aliquam erat volutpat.Ut wisi enim ad minim veniam, quis nostrud exerci ção ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.Duis autem vel eum iriure dolor no hendrerit em vulputate velit esse molestie consequat, vel illum dolore ue 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 opção congue nihil imperdiet domingo id quod mazim placerat facer possim assum.Typi non habent claritatem insitam;est usus legentis no iis qui facit eorum claritatem.Investigationes demonstraverunt lectores legere-me lius quod ii legunt saepius.Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum.Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis por seacula decima quarta et decima quinta.Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes em futurum.
Eu preciso encontrar e extrair o valor de yyyyy
o que vem depois xxxx :
, e a posição da variável dentro do texto.Até então, eu tentei isso:
SELECT
SUBSTRING_INDEX(
RIGHT(description,
GREATEST(LOCATE('xxxx :', description),
LOCATE('xxxx :', description))-1), ' ', -1)
FROM wwwww
Eu sei que pode ser a maneira de resolvê-lo, mas eu não posso fazer isso funciona direito.(Eu olhei esse já: Retorno texto específico do MySQL usando o LOCALIZAR e SUBSTRING)
PS:O "XXXX :" é sempre o mesmo...o yyyyy tem o valor de uma variável
Solução
por favor, tente isso
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(description,'XXXX : ',-1),' ',1) from wwwww
aqui está o sqlFiddle
não sei por que ele não está funcionando para você, talvez tente esta variação ver se funciona
SELECT SUBSTRING_INDEX(RIGHT(post_content,LENGTH(post_content) - (LOCATE('XXXX : ',post_content)+6)),' ',1) as var from wp_posts
Outras dicas
Para encontrar a primeira palavra (ou uma seqüência de caracteres) que segue xxxx :
(possivelmente com e sem espaços em torno de :
) em um bloco de texto usando PHP e regex:
$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;