web-dev-qa-db-fra.com

Création de DATETIME à partir de DATE et TIME

Y at-il moyen dans MySQL de créer DATETIME à partir d’un attribut donné de type DATE et d’un attribut donné de type TIME?

38
gregor
datetime = CONCAT(date, ' ', time);
17
Zed

Copié à partir de la documentation MySQL:

TIMESTAMP (expr), TIMESTAMP (expr1, expr2)

Avec un seul argument, cette fonction renvoie l'expression de date ou de date/heure expr en tant que valeur date/heure. Avec deux arguments, il ajoute l'expression time expr2 à l'expression date ou datetime expr1 et renvoie le résultat sous la forme d'une valeur datetime.

mysql> SELECT TIMESTAMP('2003-12-31');
    -> '2003-12-31 00:00:00'
mysql> SELECT TIMESTAMP('2003-12-31 12:00:00','12:00:00');
    -> '2004-01-01 00:00:00'
39
johnson

Pour obtenir une valeur true DATETIME à partir de vos deux valeurs DATE et TIME distinctes:

STR_TO_DATE(CONCAT(date, ' ', time), '%Y-%m-%d %H:%i:%s')
35
CDuv

Vous pouvez utiliser ADDTIME():

ADDTIME(CONVERT(date, DATETIME), time)
  • date peut être une chaîne de date ou un objet DATE.
  • time peut être une chaîne temporelle ou un objet TIME.

Testé dans MySQL 5.5.

9
SystemParadox
select timestamp('2003-12-31 12:00:00','12:00:00'); 

fonctionne lorsque la chaîne est correctement formatée. Sinon, vous pouvez simplement inclure l'heure à l'aide de str_to_date. 

select str_to_date('12/31/2003 14:59','%m/%d/%Y %H:%i');
0
Kalle

Sans créer ni analyser de chaînes, ajoutez simplement un intervalle à la date:

set @dt_text = '1964-05-13 15:34:05.757' ;
set @d = date(@dt_text) ;
set @t = time(@dt_text) ;
select @d, @t, @d + interval time_to_sec( @t ) second;

Toutefois, cela tronque les microsecondes.

Je suis d'accord avec Muki - assurez-vous de prendre en compte les fuseaux horaires et l'heure d'été!

0