2010-03-13 17 views
26

No pude averiguar (googlear, leer el manual de referencia de mysql) cómo obtener el valor de DATETIME en segundos en MySQL.MYSQL - datetime to seconds

No quiero extraer segundos de datetime, sino convertirlos en segundos.

Respuesta

27

Si usted quiere tener la diferencia entre los valores de fecha y hora, utilice TIMESTAMPDIFF:

TIMESTAMPDIFF (unidad, datetime_expr1, datetime_expr2)

devoluciones datetime_expr2 – datetime_expr1, donde datetime_expr1 y datetime_expr2 son de fecha o de fecha y hora expresiones. Una expresión puede ser una fecha y la otra una fecha y hora; un valor de fecha se trata como una fecha y hora teniendo la parte de tiempo '00: 00: 00 'cuando sea necesario. La unidad para el resultado (un entero) viene dada por el argumento de la unidad. Los valores legales para la unidad son los mismos que los enumerados en la descripción de la función TIMESTAMPADD().

mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');
-> 3
mysql> SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01');
-> -1
mysql> SELECT TIMESTAMPDIFF(MINUTE,'2003-02-01','2003-05-01 12:05:55');
-> 128885

unit también se puede HOUR que es lo que solicitó en uno de los comentarios.

+0

Lo siento, pero estoy preguntando todo DATETIME :( – Mike

+0

@ Mike: Vea mi respuesta actualizada. –

+0

dulce :) Marque su respuesta como la correcta :) gracias – Mike

34

Si por "convertir a segundos", que quiere decir "convertir a un UNIX Timestamp" (es decir, número de segundos desde 1970-01-01), a continuación, puede utilizar la función UNIX_TIMESTAMP:

select UNIX_TIMESTAMP(your_datetime_field) 
from your_table 
where ... 


Y, en aras de la completitud, para convertir de una marca de tiempo Unix a una fecha y hora, puede usar la función FROM_UNIXTIME.

+0

bueno y cuando quiero DIFERENCIA entre dos fechas en HORAS, ¿debería usar algo como? : select (unix_timestamp ('2010-01-02 18:00:00') - unix_timestamp ('2010-01-01 16:00:00'))/60/60; – Mike

+0

Supongo que la función TIMESTAMPDIFF debería hacer el truco: permite especificar la unidad deseada (ver http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_timestampdiff) –

+0

gracias, Felix ya sugirió usar timesteampdiff, eso es lo que quería – Mike

2

La función UNIX_TIMESTAMP (datetime) devuelve el tiempo Unix, que pasa a ser el número de segundos desde el 1-ene-1970 0000 UTC. Eso puede ser lo que necesita, pero no si usted está tratando con fechas de nacimiento, fechas históricas, o fechas posteriores a 2037.

2

a partir de MySQL 5.5.0 puede utilizar to_seconds()

TO_SECONDS(FIELD_NAME) 

FIELD_NAME debe ser DATETIME tipo

6

Uso TIME_TO_SEC en versiones anteriores de MySQL

SELECT TIME_TO_SEC (columna de tiempo) de la tabla

0

He creado mi propia consulta para su problema:

select (hour(*colname*)*3600 + minute(*colname*)*60 + second(*colname*)) 
from widgets 
where id=1; 
  • Use id=1 si tiene que tomar una fila específica.
  • La salida estará en segundos.
+0

La pregunta ya fue respondida hace mucho tiempo, y la respuesta aceptada también trata de días, no solo de horas y minutos. El OP aclaró en un comentario que quería calcular la diferencia entre dos fechas en horas. –