Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Concat, substr y locate.

Estas en el tema de Concat, substr y locate. en el foro de Mysql en Foros del Web. Buenas, amigos tengo hoy otra duda más, decidles que trabajo con MySQL query browser ya que en el instituto donde yo curso es el programa ...
  #1 (permalink)  
Antiguo 11/02/2014, 10:28
 
Fecha de Ingreso: febrero-2014
Mensajes: 3
Antigüedad: 10 años, 10 meses
Puntos: 0
Concat, substr y locate.

Buenas, amigos tengo hoy otra duda más, decidles que trabajo con MySQL query browser ya que en el instituto donde yo curso es el programa que utilizamos. Sé que está antiguo.

Bueno aquí viene el caso, resulta que necesito sacar las iniciales de los nombres de los alumnos tal que así: tengo que mostrar las iniciales primero por el nombre del alumno, y después por sus apellidos.

Me tendría que quedar así, el primero es María Marisol Hernández, usando las funciones concat substr y locate me quedaría tal que así. M.M.H. y tengo que separarlas por un punto.

Lo que yo tengo hecho es esto:
Código:
SELECT NOMBRE, CONCAT(SUBSTR NOMBRE,1(LOCATE NOMBRE, '.',1))
FROM ALUMNOS;
la función de momento me da error ya que bueno, me cuesta un poco pillarlo, y al tener que sacar el nombre y sus apellidos, me imagino que será demasiado larga la función, si me pudiesen ayudar a como poner bien la primera línea de la función lo demás podré hacerlo yo solo, así que gracias!!
  #2 (permalink)  
Antiguo 12/02/2014, 03:16
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 9 meses
Puntos: 574
Respuesta: Concat, substr y locate.

Cita:
si me pudiesen ayudar a como poner bien la primera línea de la función
Yo empezaria por aqui

CONCAT_WS(".",

luego puede ser de gran ayuda el manual http://dev.mysql.com/doc/refman/5.0/...functions.html

Nombres y apellidos estan en el mismo campo?

Lo siento pero no se hacen ejercicios de clase.

Pero pensandolo bien .... es duro el ejercicio ... puesto que hay algun problema de recursibidad puesto que no sabemos cuantos blancos tiene cada nombre.

Que habría que hacer con (informaticamente quiero decir)

María Dolores de Cospedal García

o con

Juan Carlos Alfonso Víctor María de Borbón y Borbón-Dos Sicilias

ambos casos "reales"
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 12/02/2014 a las 05:48
  #3 (permalink)  
Antiguo 12/02/2014, 04:54
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Concat, substr y locate.

Como te dicen, hay casos que no se pueden resolver simplemente con una funcion almacenada por sus características sin recursividad..
Pero hay un problema adicional: En MySQL no existe la posibilidad de hacer funciones o procesos recursivos. No lo admite.

A pesar de eso, existe una forma de lograr algo como lo que pretendes, y sería iterando un SUBSTRING_INDEX usando LOOP o REPEAT.
Podría ser algo así, por ejemplo:

Código MySQL:
Ver original
  1. CREATE FUNCTION iniciales(texto VARCHAR(250) RETURNS VARCHAR(100)
  2.   DECLARE resto VARCHAR(250);
  3.   DECLARE inicial VARCHAR (100);
  4.  
  5.   /* VErificar que no hayan ingresado un valor vacío */
  6.   IF TRIM(resto) = '' THEN
  7.     RETURN '';
  8.   END IF;
  9.  
  10.   SET inicial = CONCAT(UPPER(LEFT(TRIM(texto), -1)), '.');
  11.   SET resto = SUBSTRING_INDEX(texto, ' ' , 1);
  12.  
  13.   /* Verificar si sólo se ingresó una palabra */
  14.   IF LOCATE(resto, ' ') = 0 THEN
  15.     RETURN inicial;
  16.   END IF;
  17.  
  18.   REPEAT
  19.     /* Tomar siguiente incial*/
  20.     SET inicial = CONCAT(UPPER(LEFT(TRIM(resto), -1)), '.');
  21.     /* Quitar el segmento */
  22.     IF LOCATE(resto, ' ') > 0 THEN
  23.       SET resto   = SUBSTRING_INDEX(resto, ' ' , -1);
  24.     END IF;
  25.   UNTIL LOCATE(resto, ' ') = 0 END REPEAT;
  26.  
  27.   RETURN inicial;

Obviamente, esto devovlerá como iniciales todas las palabras que encuentre, sin importar si tiene una sola letra o no. Y no reconocerá otros símbolos, como "-".
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 12/02/2014 a las 07:54

Etiquetas: concat, ejercicio, substr
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:27.