Comment formater le champ bigint dans une date dans Postgresql?
J'ai une table avec un champ de type bigint. Ce champ stocke un horodatage. Je veux dater le champ comme ceci:
to_char( bigint_field,'DD/MM/YYYY HH24:MI:SS')
Je reçois l'erreur suivante:
ERROR: multiple decimal points État SQL :42601
3 réponses
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 d'époque, ou non.
select to_timestamp(20120822193532::text, 'YYYYMMDDHH24MISS')
Renvoie
"2012-08-22 19:35:32+00"
, je l'ai fait comme ceci:
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 dans vous sélectionnez statemant, il suffit d'échanger le numéro avec votre base de données colunm.
Explication étape par Étape:
to_char(20120822193532, '9999-99-99 99:99:99')
Cela va créer une chaîne comme ceci:
"2012-08-22 19:35:32"
Maintenant, nous pouvons facilement convertir cela en un horodatage:
to_timestamp('2012-08-22 19:35:32','YYYY-MM-DD HH24:MI:SS')
Résultat sera le même qu'avant, mais c'est maintenant timestamp.
Aussi, 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 (timestamp avec fuseau horaire) à la place de timestamp (timestamp sans fuseau horaire). Vous pouvez le changer comme ceci:
ALTER TABLE table2 ALTER realDate SET DATA TYPE timestamp USING realDate;