web-dev-qa-db-fra.com

Comment convertir un horodatage d'époque en une date en SQL standard

Je n'ai pas trouvé de réponse simple à cette question en regardant autour de moi. Je me suis donc dit que je l'aurais posée ici au cas où quelqu'un aurait le même problème que moi avec ce qui aurait dû être une question triviale.

J'utilisais l'analytique ReDash avec BigQuery de Google et j'avais activé SQL standard dans les paramètres de la source de données. Pour les besoins de ma requête, je devais convertir un horodatage - heure Unix en millisecondes, sous forme de chaîne - en un format Date afin de pouvoir utiliser la méthode DATE_DIFF.

Par exemple ... "1494865480000" à "2017-05-15"

La difficulté était que le casting et la conversion étaient excessivement stricts et qu'il ne semblait pas y avoir de moyen adéquat pour le faire analyser. Voir ma réponse ci-dessous! (Laissez-moi savoir si certains Sensei SQL connaissent une méthode plus éloquente!)

6
Joseph Wolf

En SQL standard, utilisez TIMESTAMP_MICROS avec EXTRACT(DATE FROM <timestamp>):

SELECT EXTRACT(DATE FROM TIMESTAMP_MILLIS(1494865480000))
8
Mosha Pasumansky

Un moyen plus simple avec TIMESTAMP_MILLIS ():

#standardSQL
SELECT DATE(TIMESTAMP_MILLIS(CAST("1494865480000" AS INT64)))

2017-05-15  
3
Felipe Hoffa

Utilisez UTC_USEC_TO_TIMESTAMP():

select UTC_USEC_TO_TIMESTAMP(postedon * 1000)

Vous pouvez ensuite extraire la date à l'aide de date():

select DATE(UTC_USEC_TO_TIMESTAMP(postedon * 1000))

Cela ne nécessite pas de connaître le format interne des horodatages Unix.

0
Gordon Linoff