[MySQL] Dividir atributo en dos

Iniciado por Kasswed, 9 Mayo 2011, 00:35 AM

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

Kasswed

Hola,

busco alguna manera de hacer lo siguiente.

Tengo un atributo en mi DB que es la fecha y la hora, es así:

"2011-05-08 23:30:32"

Es decir, fecha y hora separados por un espacio. Necesito meter la hora o la fecha en otro campo aparte, ¿es posible hacerlo automáticamente con alguna sentencia SQL?

En principio supongo que tengo que crear un nuevo campo, que sea la hora, y luego no sé cómo haría para meter la hora automáticamente, sin usar PHPs ni cosas de esas.

Ah otra cosa, ¿se pueden hacer comparaciones con la hora? 23:30:32 > 23:00:09 y cosas así?

Gracias!
"He who allows himself to be insulted, deserves to be."

Repórtame cualquier falta a las normas del foro por mensaje privado.

Shell Root

Tienes que hacer obligatoriamente en MySQL o estáis usando algún lenguaje de programación?
Como en MySQL no existe la función SPLIT(), quizás puedas implementar una función creada. :http://forums.mysql.com/read.php?60,78776,78776
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Nakp

pues existen los campos de tipo date o time (ademas de datetime) y la funcion substr ademas de las funciones datediff, date, time, timediff, y otro sinfin :)
Ojo por ojo, y el mundo acabará ciego.

cassiani

#3
Cita de: Kasswed en  9 Mayo 2011, 00:35 AM
Tengo un atributo en mi DB que es la fecha y la hora, es así:
"2011-05-08 23:30:32"
Es decir, fecha y hora separados por un espacio. Necesito meter la hora o la fecha en otro campo aparte, ¿es posible hacerlo automáticamente con alguna sentencia SQL?

Ah otra cosa, ¿se pueden hacer comparaciones con la hora? 23:30:32 > 23:00:09 y cosas así?

yo lo haría así: suponiendo que tienes los siguientes datos:

mysql> select * from tabla_ejemplo1;
+----+--------+---------+---------------------+
| id | campo1 | campo2  | fecha               |
+----+--------+---------+---------------------+
|  1 | valor1 | valor2  | 2011-05-08 20:11:31 |
|  2 | valor3 | valor4  | 2011-05-08 20:19:57 |
|  3 | valor5 | valor6  | 2011-05-08 20:20:05 |
|  4 | valor7 | valor8  | 2011-05-08 20:20:10 |
|  5 | valor9 | valor10 | 2011-05-08 20:20:15 |
+----+--------+---------+---------------------+


uso las funciones LEFT y RIGHT
Código (sql) [Seleccionar]
select campo1, campo2, left((fecha),10) as dia, right((fecha),8) as hora from tabla_ejemplo1 where id=3;

devuelve:
+--------+--------+------------+----------+
| campo1 | campo2 | dia        | hora     |
+--------+--------+------------+----------+
| valor5 | valor6 | 2011-05-08 | 20:20:05 |
+--------+--------+------------+----------+


Cita de: Kasswed en  9 Mayo 2011, 00:35 AM
Ah otra cosa, ¿se pueden hacer comparaciones con la hora? 23:30:32 > 23:00:09 y cosas así?

En ese caso puedes usar between
Código (sql) [Seleccionar]
select * from tabla_ejemplo where fecha between '2010-01-01' and '2011-01-01';


espero te sirva.

Kasswed

Ya lo arreglé con las funciones DATE() y TIME()!

Gracias a todos!
"He who allows himself to be insulted, deserves to be."

Repórtame cualquier falta a las normas del foro por mensaje privado.