web-dev-qa-db-fra.com

Comment formater un champ bigint en une date dans Postgresql?

J'ai une table avec un champ de type bigint. Ce champ stocke un horodatage. Je veux dater le format du champ comme ceci:

to_char (bigint_field, 'JJ/MM/AAAA HH24: MI: SS')

J'obtiens l'erreur suivante:

 ERREUR: plusieurs décimales 
 État SQL: 42601 
43
Stephan
TO_CHAR(TO_TIMESTAMP(bigint_field / 1000), 'DD/MM/YYYY HH24:MI:SS')
78
Quassnoi

Cela dépend de ce que représente la valeur bigint - décalage du temps Epoch ou non.

select to_timestamp(20120822193532::text, 'YYYYMMDDHH24MISS')

retour

"2012-08-22 19: 35: 32 + 00"

4
Jordan K

Je l'ai fait comme ça:

to_timestamp(to_char(20120822193532, '9999-99-99 99:99:99'),'YYYY-MM-DD HH24:MI:SS')

le résultat ressemble à ceci:

2012-08-22 19:35:32

vous pouvez également l'utiliser pour sélectionner statemant, il suffit d'échanger le numéro avec votre base de données.

Explication étape par étape:

to_char(20120822193532, '9999-99-99 99:99:99')

Cela va créer une chaîne comme celle-ci:

"2012-08-22 19:35:32"

maintenant, nous pouvons facilement le convertir en horodatage:

to_timestamp('2012-08-22 19:35:32','YYYY-MM-DD HH24:MI:SS')

Le résultat sera le même qu'avant, mais c'est maintenant un horodatage.

De plus, si vous l'utilisez pour une commande comme

CREATE TABLE table2 AS SELECT to_timestamp(to_char(tb1.date, '9999-99-99 99:99:99'),'YYYY-MM-DD HH24:MI:SS') AS realDate FROM table1 AS tb1; 

vous pourriez vous retrouver avec timstamptz (horodatage avec fuseau horaire) au lieu de horodatage (horodatage sans fuseau horaire). Vous pouvez le changer comme ceci:

ALTER TABLE table2 ALTER realDate SET DATA TYPE timestamp USING realDate;
2
Th3NetForc3