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
TO_CHAR(TO_TIMESTAMP(bigint_field / 1000), 'DD/MM/YYYY HH24:MI:SS')
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"
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;