web-dev-qa-db-fra.com

Convertir le texte en horodatage dans redshift

J'ai un champ de texte "presence_changed_at" avec des valeurs de texte, à savoir '2014/12/17 08:05:28 +0000. J'ai besoin de convertir ceci en horodatage. Dans postgreSQL, il existe une fonction TO_TIMESTAMP () , mais dans redshift cela ne semble pas être pris en charge. Je peux obtenir la date sans heure par

TO_DATE("presence_changed_at",'YYYY/MM/DD HH24:MI:SS')

qui produit

2014-12-12

mais je ne trouve aucun moyen d'obtenir le format TIMESTAMP.

Merci d'avance pour résoudre ce problème

6
user5157294

essayez de convertir la fonction:

convert(timestamp,presence_changed_at)
3
user3600910

C'est étonnamment horrible d'obtenir une date-heure à partir d'unix dans redshift sans sous-sélection. Cependant, vous pouvez faire ceci:

select timestamptz 'Epoch' + YOURTIME * interval '1 second'

2
John Haugeland
cast(column as timestamp)

travaillé pour moi sur redshift. Voir http://devdocs.io/postgresql~9.4/sql-expressions#SQL-SYNTAX-TYPE-CASTS

2
Harry Moreno

Veuillez utiliser TO_Timestamp("presence_changed_at",'YYYY/MM/DD HH24:MI:SS') pour obtenir le résultat souhaité.

2
Saurabh Gautam

Vous pouvez le lancer sur un horodatage. Cela supporte pas mal de formats raisonnables sans avoir à en spécifier un.

select '2014/12/17 08:05:28 +0000'::timestamp;

      timestamp
---------------------
 2014-12-17 08:05:28

select '2014-12-02T05:00:00'::timestamp;
      timestamp
---------------------
 2014-12-02 05:00:00

select '2014-12-02T05:00:00PM'::timestamp;
      timestamp
---------------------
 2014-12-02 17:00:00
1
systemjack

À partir d’aujourd’hui, to_timestamp est pris en charge par redshift. Votre requête SQL devrait donc fonctionner. Vérifiez http://docs.aws.Amazon.com/redshift/latest/dg/r_TO_TIMESTAMP.html

1
Dheeraj M R

Les fonctions ci-dessous ont fonctionné correctement pour moi ... Utilisez ce qui vous est applicable ...

cast (nom_colonne en tant qu'horodatage)

to_date (nom_colonne, 'MM/JJ/AAAA HH24: MI: SS')

to_date (nom_colonne, 'MM/JJ/AAAA HH12: MI: SS')

to_timestamp (nom_colonne, 'MM/JJ/AAAA HH24: MI: SS')

0
karthik G

J'ai récemment travaillé sur une base de données dans laquelle une variable de date et heure était stockée sous forme de texte dans un type VARCHAR, dans plusieurs formats différents (ne pas demander ...), et devait être convertie en un type TIMESTAMP. Puisqu'il n'y a pas de fonction TO_TIMESTAMP() dans Redshift, j'ai utilisé le truc suggéré par Yiyu Jia sur son [blog] [1]. En bref, le truc est de

  • utilisez TO_DATE () pour convertir la date
  • ajouter la partie temps du texte d'entrée à ce qui précède
  • CAST la chaîne résultante dans un TIMESTAMP

Par exemple, voici l'extrait de code pour traiter un champ nommé myDate avec des dates dans l'un des formats suivants

  • "8 février 2013 22:06"
  • "25/09/2007 16:21:00"

C'est plutôt lourd, mais ça marche. Un test de regex est utilisé pour vérifier si la date correspond au format traité sur une ligne donnée. (nécessaire uniquement lorsque plusieurs formats sont possibles)
Le cas «février 0 2013» est un peu plus compliqué parce que je supprime la partie heure du texte avant de l'envoyer à TO_DATE () et parce qu'une autre expression rationnelle est utilisée pour extraire la partie heure qui est ajoutée ( par opposition à SUBSTRING () plus simple utilisé dans le même but, dans l’autre cas).

... ,
CASE
  -- Special date indicating "date not available": replaced by NULL
  WHEN myDate = '31/12/9999 23:59:59' OR myDate = 'Dec 31 9999 11:59PM' THEN NULL 
  -- 'Feb  8 2013 10:06PM' case
  WHEN myDate ~ '^[JFMASOND][a-z]{2}'  THEN
      CAST(TO_DATE(REGEXP_REPLACE(myDate , '\\s[0-9]{1,2}:[0-9]{2}[AP]M$', ''), 'Mon FMDD YYYY') || REGEXP_REPLACE(myDate , '[JFMASOND][a-z]{2}\\s+[0-9]{1,2}\\s+[0-9]{4}\\s+', ' ') AS TIMESTAMP)
  -- '25/09/2007 16:21:00' case
  WHEN myDate ~ '^[0-9]{2}/[0-9]{2}/[0-9]{4} '  THEN
      CAST(TO_DATE(myDate , 'DD/MM/YYYY HH24:MI:SS') || SUBSTRING(myDate FROM 11) AS TIMESTAMP)
  ELSE NULL
END AS MyNiceTimeStamp, 
...

  [1]: http://yiyujia.blogspot.com/2014/04/redshift-convert-integer-to-timestamp.html
0
mjv