1
votes

Conversion de l'heure Unix en DateTime 103

J'ai une procédure stockée qui joint deux tables de données de réservation d'hôtel, cependant, l'API dont je tire mes données utilise l'heure Unix. Je dois le convertir en DateTime pour qu'il corresponde aux champs de mon entreprise.

Actuellement, ma conversion ressemble à ceci.

IIF([start] IS NOT NULL, 
    CONVERT(varchar(10), [start], 103),'')  as 'ArrivalDate'

Cela renvoie simplement la valeur 1547310796 donc aucune conversion n'a été effectuée.

Comment puis-je convertir la valeur pour qu'elle corresponde à 103 date / heure?


2 commentaires

. . . C'est parce que votre valeur de base n'est pas au format souhaité (c'est-à-dire date ).


Quel SGBD utilisez-vous? "SQL" est juste un langage de requête, pas le nom d'un produit de base de données spécifique (et il n'y a pas de IIF dans le standard SQL). Veuillez ajouter une balise pour le produit de base de données que vous utilisez


3 Réponses :


1
votes

Cela devrait le faire:

SELECT DATEADD(second, 1547310796 - DATEDIFF(second, GETDATE(), GETUTCDATE()), '1970-01-01')

La partie DATEDIFF (second, GETDATE (), GETUTCDATE ()) vous donnera la distance derrière vous venez de l'heure UTC. Vous devez soustraire ce nombre de secondes de l'horodatage UTC pour obtenir l'heure locale.


0 commentaires

0
votes

fonctionne sur Oracle / Sql

select TO_date ('19700101000000','YYYYMMDDHH24MISS') + NUMTODSINTERVAL(<YOUR_COLUMN>+ decode (sessiontimezone, '+01:00', 3600, '+02:00', 7200, 0) , 'SECOND') as ArrivalDate


3 commentaires

C'est Oracle (?). La question est étiquetée "sql-server"


@HansKe st ing non, pas oracle.


"'to_date' n'est pas un nom de fonction intégré reconnu."



1
votes

Je voulais juste y revenir et ajouter une autre réponse qui fonctionne si vous voulez juste la date et non l'heure.

    SELECT cast(DATEADD(S,[start], '1970-01-01') as date) as 'ArrivalDate'


0 commentaires