Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/10/2012, 13:35
elpropiopato23
 
Fecha de Ingreso: octubre-2011
Ubicación: Niquitao
Mensajes: 28
Antigüedad: 12 años, 6 meses
Puntos: 0
Capitalizar palabra en una frase de mysql menos las Palabras de 1 a 3 caracteres.

Buenas Tardes Amigos de Foros del Web, tengan un cordial saludo.

Tengo un problemita y es el siguiente me encuentro haciendo una consulta mysql, se me pidió capitalizar la primer letra de cada palabra en un campo de mysql a excepción de las palabras de 1 a 3 caracteres, esas palabras si deben ir en minúsculas.

Por lo tanto tengo la tabla material la cual contiene los siguientes campos idmaterial, title el tipo de campo title es VARCHAR(128) y este es el campo que deseo capitalizar

Idmaterial----------------------- title
1---------------------------UNA PREGUNTA PARA CADA DÍA DEL AÑO QUE PASO
2---------------------------QUE DICCIONARIO USA PARA USUARIOS DE COMPUTADORAS DEL COLEGIO

Yo busque en este link: http://www.v3rgu1.com/blog/101/2010/bases-de-datos/letra-capital-con-sql/ esta es una función muy buena que hay que crearla; Cuya función después de crearla me capitaliza la primer letra de cada palabra de un campo específico, por ejemplo usando la función de ese link en una consulta sería así:

select UCWORDS2(title) from material where idmaterial = 1; Me arrojaría este resultado:

Idmaterial------------------------------title
1----------------------------Una Pregunta Para Cada Día Del Año Que Paso


Y aquí es donde entra mi problema no se debe capitalizar las palabras como “Una, Día, Del, Año”, por lo tanto pensé en una solución reemplazando las palabras buscandolas por texto completo, por ejemplo esta consulta me busca las palabras exactas por palabras:

SELECT * FROM material WHERE title like '% Del %' esta consulta busca la palabra completa con un espacio en blanco después del signo % y antes de la palabra; y otro espacio en blanco después de la palabra y antes del sigo % encontrando así solo esta palabras en una frase;

Idmaterial------------------------------title
1----------------------------Una Pregunta Para Cada Día Del Año Que Paso

Debe ser así la consulta pues se evita que se encuentren frases con palabras como “delicioso, delicado o delinear”, pero a la hora de actualizar este campo con esta instrucción:

UPDATE material SET title=REPLACE(title,'% Del %' ,' del ') no se actualiza esa fila;

Ahora como mi idea es actualizar en ese campo una lista de posibles palabras yo uso el case de esta forma:
UPDATE material set title=(
CASE
WHEN title LIKE '% Del %' THEN title = REPLACE(title,'% Del %',' del ')
WHEN title LIKE '% QUE %' THEN title = REPLACE(title,'% Que %',' que ')
ELSE title
END)

de esta forma actualizaría todos los registros donde tengan las palabras que especifique en esa lista, pero a la Hora de Ejecutar esta consulta, se actualizan todas las filas que tienen las palabras que especifico en esa lista, pero me cambia todo el texto por un “1”.

Idmaterial------------------------------title
1---------------------------------------1
2---------------------------------------1

No sé porque da este resultado.
Por lo tanto no sé qué error este cometiendo en esa consulta update o si me den una mejor sugerencia, para lograr el resultado esperado con la capitalización de Palabrasa excepción de las palabras de 1 a 3 caracteres.

Cualquier sugerencia será bienvenida.
Muchas Gracias.