2017-09-07 5 views
0

J'ai des dates de naissance stockées dans une base de données MySQL dont j'ai besoin converti en un format de date lisible yyyy-mm-dd hh:mm:ss. Je ne peux pas utiliser la fonction From_Unix de MySQL car de nombreuses dates de naissance sont antérieures à 1970 et la fonction renvoie NULL. (À savoir -866138400000 qui est 21.07.1942)Comment puis-je convertir la date de MySQL stockée en négatif (signé) bigint au format de date?

J'ai essayé d'utiliser les tiques, mais qui revient également NULL:

(FROM_DAYS(365 + (req.PATIENTDOB/864000000000)) + INTERVAL (req.PATIENTDOB % 864000000000)/10000000 SECOND) AS ptDob 

Toute avance serait grandement appréciée. Je vous remercie.

+0

si la valeur est toujours stockée sous forme de microsecondes depuis 1970. et les valeurs négatives signifie avant 1970 seulement l'écrire parce qu'il m'a fallu une seconde pour comprendre – RealCheeseLord

Répondre

1

Je ne sais pas pourquoi vous compliquez les choses. Juste diviser par 1000 pour obtenir des secondes au lieu de microsecondes et soustraire cela à partir de 1970-01-01.

mysql > select '1970-01-01' + interval -866138400000/1000 second; 
+---------------------------------------------------+ 
| '1970-01-01' + interval -866138400000/1000 second | 
+---------------------------------------------------+ 
| 1942-07-22 06:00:00        | 
+---------------------------------------------------+ 
1 row in set (0.00 sec) 

Ainsi, votre requête serait en fait cela bien sûr:

select '1970-01-01' + interval your_column/1000 second from your_table; 

Cette requête prouve que votre hypothèse, qu'il serait 21/07/1942 est erroné. 1942-07-22 est correct.

mysql > select timestampdiff(second, '1942-07-21', '1970-01-01'); 
+---------------------------------------------------+ 
| timestampdiff(second, '1942-07-21', '1970-01-01') | 
+---------------------------------------------------+ 
|           866246400 | 
+---------------------------------------------------+ 
0

Vous avez trouvé une réponse lors de la recherche d'époques négatives. J'ai été capable d'utiliser la fonction From_Unixtime après tout!

select date_format((DATE_ADD(FROM_UNIXTIME(0), interval -866138400000/ 1000 second)),'%Y-%m-%d') as ptdate; -> « 21/07/1942 »

Lien vers Reference> Regardez sous la section Époques négative