Convertir époque unix timestamp à TSQL datetime
J'ai trouvé que une question similaire mais pour MySQL.
Je travaillais sur un web service, et d'interroger la base de données (MS SQL server). Puisque je ne pouvais pas obtenir le bon résultat, j'ai décidé de tester la requête par l'intermédiaire d'un client SQL. Le service web utilise Hibernate pour accéder à la DB et de toutes les valeurs de temps sont toujours représentés comme des valeurs longues (unix époque). Pour le tester, j'avais besoin de convertir le timestamp unix pour TSQL timestamp. C'est ce que je suis venu avec:
select dateadd(ms,123,'1970-01-01 00:00:00.0');
sorties:
1970-01-01 00:00:00.123
Mais, mes données réelles a été un peu plus grand
select dateadd(ms,1359016610667 ,'1970-01-01 00:00:00.0');
sorties:
Error code 0, SQL state 22001: Data truncation
Error code 8115, SQL state 22003: Arithmetic overflow error converting expression to data type int.
Donc, j'ai essayé:
select dateadd(ms,CAST (1359016610667 AS BIGINT) ,'1970-01-01 00:00:00.0');
qui sort exactement la même erreur. Juste pour être sûr, j'ai essayé:
select CAST (1359016610667 AS BIGINT)
sorties:
1359016610667
J'ai fait en sorte que java longue est équivalent à TSQL bigint - ils sont à la fois 8 B
de long. Une relecture de l' dateadd() documentation a révélé ce qui suit:
DATEADD (datepart , nombre , date )
....
nombre
Est une expression qui peut être résolu int qui est ajouté à une partie de la date. Variables définies par l'utilisateur sont valides.
Si je comprends bien, cela signifie que cette approche ne peut pas être utilisé pour convertir un timestamp unix pour TSQL timestamp, qui est, bien, pardonnez mon langage, mais tout simplement retardée.
Mes questions sont:
- est mon interprétation de cette situation correcte?
- est-il un autre one-liner pour faire cette conversion en TSQL ?
PS
modification de la date de l'argument ('1970-01-01 00:00:00.0'
) n'est pas acceptable comme solution. Je suis le débogage et je ne veux pas de recalculer les milisecondes le long 🙂
LoL, encore une fois? eh bien, vous voyez la partie supérieure de commentaire...
OriginalL'auteur linski | 2013-01-24
Vous devez vous connecter pour publier un commentaire.
Facile, d'abord ajouter des jours entiers, puis ajouter le reste de ms. Il y a 86,400,000 millisecondes dans une journée.
Le résultat est
2013-01-24 08:36:50.667
OriginalL'auteur Ben
Cela devrait fonctionner parfait pour les longues epoch times.
OriginalL'auteur Scotty