Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: narillos en 1 Septiembre 2015, 23:16 pm



Título: Convertir un campo de texto
Publicado por: narillos en 1 Septiembre 2015, 23:16 pm
Hola tento una tabla dentro de una bd llamada "centro"  (donde hay un listado de centros de alumnos) y otra tabla llamada "visitacentro" donde hay una "fecha" (que en realidad es un texto donde pongo dd/mm/aaaa porque me he vuelto loco con las fechas y al final las introduzco tipo texto) y los diferentes "centros"  centros visitados por fecha. Puede haber un centro no visitado que no estaría o un centro visitado varias veces.

Quisiera hacer una consulta donde me pusiese  todos los centros de la tabla centro pero que fuese a visitacentro y buscara la última "fecha" de visita de ese centro.

¿Podría de algún modo transformar la fecha visita que tendrá siempre valor dd/mm/aaaa (pero que es texto) a formato fecha?  ¿Esto se podría hacer de alguna forma en phpmyadmin?

¿Cómo podría decirle si un "centro" está varias veces en "visitacentro" ponme la fecha más alta (Es decir la más cercana a hoy).

A ver si me podeis orientar.


Título: Re: Convertir un campo de texto
Publicado por: someRandomCode en 2 Septiembre 2015, 00:08 am
Podes hacer un UNION SELECT con un ORDER BY..
En cuanto a transformar hay formas si, tenes tanto CAST como CONVERT.
Desde phpMyAdmin lo vas a poder hacer, confeccionando previamente el SQL y ejecutandolo.


Título: Re: Convertir un campo de texto
Publicado por: 0roch1 en 5 Septiembre 2015, 03:09 am
Si estás trabajando en mysql puedes hacer lo siguiente.

Convertir fecha tipo texto (varchar) a tipo fecha (date)
Código
  1. SELECT STR_TO_DATE(centro_fecha, '%d/%m/%Y') FROM visitacentro;
  2.  

Suponiendo que el formato de la fecha tipo texto está como dd/mm/aaaa

Para obtener la fecha más reciente visitada en cada centro puedes hacerlo así.

Código
  1. SELECT centro_id, MAX(STR_TO_DATE(centro_fecha, '%d/%m/%Y')) FROM visitacentro GROUP BY centro_id;
  2.  


Si quieres consultar campos de la tabla centro puedes hacerlo con JOIN pero yo te recomiendo Subquerys.

Código
  1.  
  2. SELECT c.centro_id, c.centro_nombre, MAX(STR_TO_DATE(vc.centro_fecha, '%d/%m/%Y')) FROM centro AS c, visitacentro AS vc WHERE c.centro_id=vc.centro_id GROUP BY vc.centro_id;
  3.  

Otra forma..
Código
  1.  
  2. SELECT c.centro_id, c.centro_nombre, MAX(STR_TO_DATE(vc.centro_fecha, '%d/%m/%Y')) FROM centro AS c, visitacentro AS vc GROUP BY vc.centro_id;
  3.  


Otra forma...
Código
  1. SELECT *
  2. FROM centro AS c, visitacentro AS vc1
  3. WHERE (STR_TO_DATE(vc1.centro_fecha, '%d/%m/%Y')) = (SELECT MAX(STR_TO_DATE(vc2.centro_fecha, '%d/%m/%Y'))
  4.                 FROM visitacentro AS vc2
  5.                 WHERE vc2.centro_id = vc1.centro_id) AND c.centro_id=vc1.centro_id;
  6.  

Con inner join

Código
  1. SELECT c.centro_id, MAX(STR_TO_DATE(vc.centro_fecha, '%d/%m/%Y')) AS fecha FROM centro AS c INNER JOIN visitacentro AS vc ON c.centro_id=vc.centro_id GROUP BY vc.centro_id
  2.  

Espero te sirva de ayuda.

Saludos.