105 votes

Comment convertir la colonne d'horodatage du serveur SQL en format de temps.

Comme le serveur SQL renvoie l'horodatage comme 'Nov 14 2011 03:12:12:947PM' existe-t-il un moyen simple de convertir une chaîne de caractères en un format de date tel que 'Y-m-d H:i:s'.

Jusqu'à présent, j'ai utilisé

date('Y-m-d H:i:s',strtotime('Nov 14 2011 03:12:12:947PM'))

-1voto

Robert Mauro Points 429

Je suppose que vous avez effectué un vidage de données sous forme d'instructions d'insertion et que vous (ou toute personne qui consulte Google à ce sujet) essayez de déterminer la date et l'heure ou de les traduire pour les utiliser ailleurs (par exemple, pour les convertir en insertions MySQL). C'est en fait facile dans n'importe quel langage de programmation.

Travaillons avec ça :

CAST(0x0000A61300B1F1EB AS DateTime)

Cette représentation hexagonale est en fait deux éléments de données distincts... La date et l'heure. Les quatre premiers octets sont la date, les quatre autres l'heure.

  • La date est 0x0000A613
  • L'heure est 0x00B1F1EB

Convertissez les deux segments en nombres entiers en utilisant le langage de programmation de votre choix (il s'agit d'une conversion directe d'hexagone en nombre entier, qui est prise en charge par tous les langages de programmation modernes, je ne vais donc pas gaspiller de l'espace avec du code qui peut ou non correspondre au langage de programmation que vous utilisez).

  • La date de 0x0000A613 devient 42515
  • Le temps de 0x00B1F1EB devient 11661803

Maintenant, que faire de ces entiers :

Date

La date est depuis le 01/01/1900, et est représentée en jours. Ainsi, ajoutez 42 515 jours au 01/01/1900, et votre résultat est le 27/05/2016.

Temps

Le temps est un peu plus complexe. Prenez cet INT et faites ce qui suit pour obtenir votre temps en microsecondes depuis minuit (pseudocode) :

TimeINT=Hex2Int(HexTime)
MicrosecondsTime = TimeINT*10000/3

À partir de là, utilisez les appels de fonction préférés de votre langue pour traduire les microsecondes (38872676666.7 µs dans l'exemple ci-dessus) en temps.

Le résultat serait 10:47:52.677

-2voto

user3541554 Points 107

Pourquoi ne pas essayer FROM_UNIXTIME(unix_timestamp, format) ?

-2voto

Ambodi Points 636

Certaines d'entre elles se transforment en une date-heure de SQL Server 2008 en avant.

Essayez la requête SQL suivante et vous verrez par vous-même :

SELECT CAST (0x00009CEF00A25634 AS datetime)

Ce qui précède se traduira par 2009-12-30 09:51:03:000 mais j'en ai rencontré qui ne correspondaient pas à une date-heure.

-4voto

Daniel Points 63

Je ne sais pas si j'ai raté quelque chose ici, mais ne pouvez-vous pas convertir l'horodatage comme ceci :

CONVERT(VARCHAR,CAST(ZEIT AS DATETIME), 110)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X