web-dev-qa-db-fra.com

MYSQL - date/heure en secondes

Je n'ai pas été capable de trouver (googler, lire le manuel de référence mysql) comment obtenir la valeur de DATETIME en secondes dans MySQL.

Je ne veux pas extraire des secondes de datetime, mais les convertir en secondes.

29
Mike

Si vous voulez avoir la différence entre deux valeurs DATETIME, utilisez TIMESTAMPDIFF :

TIMESTAMPDIFF (unité, datetime_expr1, datetime_expr2)

Renvoie datetime_expr2 – datetime_expr1, où datetime_expr1 et datetime_expr2 sont des expressions de date ou de date/heure. Une expression peut être une date et l'autre une date/heure; une valeur de date est traitée comme une date/heure ayant la partie heure "00: 00: 00" si nécessaire. L'unité pour le résultat (un entier) est donnée par l'argument unité. Les valeurs légales de l'unité sont identiques à celles répertoriées dans la description de la fonction 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 peut aussi être HOUR, ce que vous avez demandé dans l'un des commentaires.

L'argument de l'unité peut être l'un des suivants:

  • MICROSECONDE 
  • SECONDE 
  • MINUTE 
  • HEURE 
  • JOURNÉE 
  • LA SEMAINE 
  • MOIS 
  • TRIMESTRE 
  • ANNÉE

Le niveau d’utilité de certaines des autres options dépendra bien entendu de la granularité des données. Par exemple, "MICROSECOND" n'aura qu'une utilisation limitée si vous ne stockez pas de microsecondes dans vos valeurs DATETIME. 

30
Felix Kling

Si par "convertir en secondes", vous voulez dire "convertir en un Timestamp UNIX" (c'est-à-dire le nombre de secondes depuis 1970-01-01), vous pouvez utiliser le UNIX_TIMESTAMP une fonction :

select UNIX_TIMESTAMP(your_datetime_field)
from your_table
where ...


Et pour compléter, pour convertir d’un horodatage Unix en date/heure, vous pouvez utiliser la fonction FROM_UNIXTIME .

39
Pascal MARTIN

Utiliser TIME_TO_SEC dans les versions précédentes pour mysql

SELECT TIME_TO_SEC (colonne d'heure) FROM table

7
Rolf Kransse

j'ai utilisé dans mysql

TO_SECONDS (votre date va ici) méthode pour convertir la date en secondes à partir de l'année 0

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

3
Shanaka

La fonction UNIX_TIMESTAMP ( datetime ) renvoie l'heure unix, qui correspond au nombre de secondes écoulées depuis le 1er janvier 1970 à 0000 UTC. C'est peut-être ce dont vous avez besoin, mais pas si vous traitez avec des dates de naissance, des dates historiques ou des dates postérieures à 2037.

2
O. Jones

À partir de mysql 5.5.0, vous pouvez utiliser to_seconds()

TO_SECONDS(FIELD_NAME)

FIELD_NAME doit être de type DATETIME

2
Biggum

J'ai créé ma propre requête pour votre problème:

SELECT HOUR(`colname`) * 3600 + MINUTE(`colname`) * 60 + SECOND(`colname`)
FROM widgets
WHERE id = 1;
  • Utilisez id = 1 si vous devez prendre une ligne spécifique.
  • La sortie sera en secondes.
0
Rinoyrix