web-dev-qa-db-fra.com

Comment convertir Bigint en horodatage avec fuseau horaire dans PostgreSQL dans une mise à jour

Existe-t-il un moyen de convertir un BIGINT en TIMESTAMP ou TIMESTAMP WITH TIME ZONE à Postgres? J'ai besoin de copier les données d'une colonne BIGINT vers la colonne TIMESTAMP.

Voici ce que j'ai essayé:

update table
set date__timestamp = date__bigint::timestamp 
where foo = 1;

ERREUR: impossible de convertir le type bigint en horodatage sans fuseau horaire

J'ai changé la colonne d'horodatage en une colonne avec fuseau horaire et j'ai essayé ceci:

update table
set date__timestamp = date__bigint::timestamp with time zone at time zone 'PST' 
where foo = 1;

ERREUR: impossible de convertir le type bigint en horodatage avec fuseau horaire

update table
set date__timstamp = TO_CHAR(TO_TIMESTAMP(date__bi / 1000), 'DD/MM/YYYY HH24:MI:SS')
where foo = 1;

ERREUR: la colonne "date__timestamp" est de type horodatage sans fuseau horaire mais l'expression est de type texte. Astuce: Vous devrez réécrire ou transtyper l'expression.

Les données ressemblent à ceci.

date_bigint: 20181102
date_timestamp: 2018-11-02 17:00:00.000000

Dois-je transmettre des valeurs par défaut au casting?

6
brettu

L'approche la plus simple sera de passer de bigint à varchar puis varchar à timestamp

alter table tablename alter column colname type varchar(30) USING colname::varchar;

puis

alter table tablename alter column colname type timestamp USING colname::timestamp;
0
The Ambidextrous