Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => Bases de Datos => Mensaje iniciado por: Kasswed en 9 Mayo 2011, 00:35 AM

Título: [MySQL] Dividir atributo en dos
Publicado por: Kasswed en 9 Mayo 2011, 00:35 AM
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!
Título: Re: [MySQL] Dividir atributo en dos
Publicado por: Shell Root en 9 Mayo 2011, 02:49 AM
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
Título: Re: [MySQL] Dividir atributo en dos
Publicado por: Nakp en 9 Mayo 2011, 03:01 AM
pues existen los campos de tipo date o time (ademas de datetime) y la funcion substr (http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substr) ademas de las funciones datediff (http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_datediff), date (http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date), time (http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_time), timediff (http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timediff), y otro sinfin :)
Título: Re: [MySQL] Dividir atributo en dos
Publicado por: cassiani en 9 Mayo 2011, 03:12 AM
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.
Título: Re: [MySQL] Dividir atributo en dos
Publicado por: Kasswed en 10 Mayo 2011, 00:44 AM
Ya lo arreglé con las funciones DATE() y TIME()!

Gracias a todos!