Pregunta

Tengo una base de datos con 1 columna que tiene campos de texto.Necesito encontrar y montar una nueva columna con una subcadena específica.Mi inglés no es bueno, así que intentaré explicarlo a continuación.

Ejemplo de 1 campo:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam no gemido nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.Ut Wisi enim ad Minim Veniam, Quis Nostrud Ejercicio Ullamcorper Suscipit lobortis nisl ut aliquip ex ea comodo consecuente.DUIS AUTEM VEL EUM IRIURE Dolor in Hendrerit en Vulputate Velit Esse Molestie Consultat, Vel Illum Dolore Eu Feugiat Nulla Facilisis en XXXX:yyyyy Vero Eros et Accumsan et iusto Odio dignissim qui blandit el elpero luptatum zzril delenit augue duis dolore te feugait nulla facilisi.Nam Liber tempor cum soluta Nobis Opción Eleifend Congular Nihil Imperdiet Doming Id Quod Mazim Placerat Facer Possim asumido.Typi non habent claritatem insitam;EST USUS LEGENTIS EN IIS QUI FACT EORUM CLARITATEM.Investigaciones Demuesterunt Lectores Legere Me Lius Quod II Legunt Saepius.Claritas est Etiam Processus Dynamicus, qui Sequitur Mutationem Consuetudium lectorum.Mirum est Notare quam litta gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis por Seacula cuarta decima et quinta decima.Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes en futurum.

Necesito encontrar y extraer el valor de yyyyy eso viene despues xxxx :, y la posición de la variable dentro del texto.Hasta ahora he probado esto:

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

Sé que esa puede ser la forma de solucionarlo, pero no puedo hacer que funcione bien.(Ya he visto esto: Devuelve texto específico de MySQL usando LOCATE y SUBSTRING)

PD:El "XXXX :" siempre es el mismo...el yyyyy tiene un valor variable

¿Fue útil?

Solución

Por favor, intente esto

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

Aquí está el sqlfiddle

No estoy seguro de por qué no está funcionando para usted, tal vez pruebe esta variación, vea si esto funciona

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

Otros consejos

Para encontrar la primera palabra (o una cadena) que sigue xxxx : (posiblemente con y sin espacios alrededor de :) en un bloque de texto usando PHP y 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;

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top