Convertir un campo de texto

Iniciado por narillos, 1 Septiembre 2015, 23:16 PM

0 Miembros y 1 Visitante están viendo este tema.

narillos

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.

someRandomCode

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.

0roch1

Si estás trabajando en mysql puedes hacer lo siguiente.

Convertir fecha tipo texto (varchar) a tipo fecha (date)
Código (sql) [Seleccionar]

SELECT STR_TO_DATE(centro_fecha, '%d/%m/%Y') FROM visitacentro;


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 (sql) [Seleccionar]

SELECT centro_id, MAX(STR_TO_DATE(centro_fecha, '%d/%m/%Y')) FROM visitacentro GROUP BY centro_id;



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

Código (sql) [Seleccionar]
     
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;


Otra forma..
Código (sql) [Seleccionar]
     
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;



Otra forma...
Código (sql) [Seleccionar]

SELECT *
FROM centro AS c, visitacentro AS vc1
WHERE (STR_TO_DATE(vc1.centro_fecha, '%d/%m/%Y')) = (SELECT MAX(STR_TO_DATE(vc2.centro_fecha, '%d/%m/%Y'))
                FROM visitacentro AS vc2
                WHERE vc2.centro_id = vc1.centro_id) AND c.centro_id=vc1.centro_id;


Con inner join

Código (sql) [Seleccionar]

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


Espero te sirva de ayuda.

Saludos.