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 🙂

sera le downvoter veuillez expliquer pourquoi la question a été downvoted?
LoL, encore une fois? eh bien, vous voyez la partie supérieure de commentaire...

OriginalL'auteur linski | 2013-01-24