Обсуждение: Conversion of a column from Integer format type to 'timestamp with time zone'

Поиск
Список
Период
Сортировка

Conversion of a column from Integer format type to 'timestamp with time zone'

От
Raj kumar
Дата:
Hi, there is a column 'created' in the 'customers' table which is actually supposed to be a 'timestamp with time zone' column but stored in this Integer format. How do I typecast this to 'timestamp with time zone' format?

select created from customers limit 3;
    created
---------------
 1521521848681
 1508995056368
 1521559994299
(3 rows)

Thanks,
Raj Kumar Narendiran.

Re: Conversion of a column from Integer format type to 'timestamp with time zone'

От
"David G. Johnston"
Дата:
On Thu, Jan 26, 2023 at 12:45 PM Raj kumar <rajkumar820999@gmail.com> wrote:
Hi, there is a column 'created' in the 'customers' table which is actually supposed to be a 'timestamp with time zone' column but stored in this Integer format. How do I typecast this to 'timestamp with time zone' format?

select created from customers limit 3;
    created
---------------
 1521521848681
 1508995056368
 1521559994299
(3 rows)


We have no way of knowing what the corresponding point-in-time a 0 in that column represents.  Or, for that matter, what a 1 means.

David J.

Re: Conversion of a column from Integer format type to 'timestamp with time zone'

От
Tom Lane
Дата:
"David G. Johnston" <david.g.johnston@gmail.com> writes:
> On Thu, Jan 26, 2023 at 12:45 PM Raj kumar <rajkumar820999@gmail.com> wrote:
>> Hi, there is a column 'created' in the 'customers' table which is actually
>> supposed to be a 'timestamp with time zone' column but stored in this
>> Integer format. How do I typecast this to 'timestamp with time zone' format?
>>
>> select created from customers limit 3;
>> created
>> ---------------
>> 1521521848681
>> 1508995056368
>> 1521559994299
>> (3 rows)

> We have no way of knowing what the corresponding point-in-time a 0 in that
> column represents.  Or, for that matter, what a 1 means.

A plausible guess is that those are Unix timestamps expressed in
milliseconds, in which case you could do this:

=# select to_timestamp(1521521848681 / 1000.0);
        to_timestamp
----------------------------
 2018-03-20 00:57:28.681-04
(1 row)

But really you need to find out, not guess.

            regards, tom lane