PostgreSQL에서 밀리 초 만에 타임 스탬프 열을 얻는 방법은 무엇입니까?


29

timestamp without time zone default now()PostgreSQL 데이터베이스에 유형이 "생성 된"열이 있습니다.

열을 선택하면 기본적으로 멋지고 읽을 수있는 형식이 있습니다.

SELECT created FROM mytable;

         created
---------------------------
2011-05-17 10:40:28.876944

그러나 타임 스탬프를 밀리 초 (길게)로 얻고 싶습니다. 이 같은:

mytable (만들기)에서 mytable 선택;

     created
-----------------
2432432343876944

PostgreSQL에서 타임 스탬프 열을 밀리 초 만에 얻을 수 있습니까?


잭에 대한 답변 :

나는 당신 (-3600)과 같은 차이를 얻지 만, 사용 timestamp with time zone하면 "오류"또는 차이점이 '1970-01-01'이 시간대를 가져 오기 때문에 발생한다는 것을 알 수 있습니다 +01.

create table my_table_2(created timestamp with time zone);
CREATE TABLE
insert into my_table_2 (created) values (now()), ('1970-01-01');
INSERT 0 2
select created, extract(epoch from created) from my_table_2;
            created            |    date_part
-------------------------------+------------------
 2011-05-18 11:03:16.909338+02 | 1305709396.90934
 1970-01-01 00:00:00+01        |            -3600
(2 rows)

차이점은 버그입니까? 현재 "일광 절약 시간제"때문일 수 있습니까?


사용하는 동안 흥미 to_timestamp()0과 1을 타임 스탬프를 삽입 할 수 있습니다.

insert into my_table_2 (created) values (to_timestamp(0));
INSERT 0 1

insert into my_table_2 (created) values (to_timestamp(1));
INSERT 0 1
select created, extract(epoch from created) from my_table_2;
            created            |    date_part
-------------------------------+------------------
 2011-05-18 11:03:16.909338+02 | 1305709396.90934
 1970-01-01 00:00:00+01        |            -3600
 1970-01-01 01:00:00+01        |                0
 1970-01-01 01:00:01+01        |                1

답변:


35

사용 EXTRACT및 UNIX 타임 스탬프

SELECT EXTRACT(EPOCH FROM TIMESTAMP '2011-05-17 10:40:28.876944') * 1000;

줄 것이다

1305621628876.94

1000밀리 초로 바꾸려면 곱하십시오 . 그런 다음 원하는대로 변환 할 수 있습니다 ( 10 진수 가 좋습니다). 시간대를 염두에 두어야합니다. JackPDouglas는 그의 대답 에서 그러한 예를 가지고있다 . 다음은 created시간대 작업 방법을 설명하는 그의 답변 (시간 소인이있는 열) 에서 발췌 한 것입니다 .

SELECT EXTRACT(EPOCH FROM created AT TIME ZONE 'UTC') FROM my_table;

5

--편집하다--

나는 이것을 발견했다 (아래 참조)는 기본적으로 잘못되었다. PostgreSQL에서 현재 유닉스 타임 스탬프를 얻는 방법을 참조하십시오 . 내 혼란의 근원을 위해 ...

-끝 편집-

댓글로 작동하지 않으므로 답변으로 게시

테스트 베드 :

create role stack;
grant stack to dba;
create schema authorization stack;
set role stack;

create table my_table(created timestamp);
insert into my_table(created) values(now()),('1970-01-01');
\d my_table
              Table "stack.my_table"
 Column  |            Type             | Modifiers
---------+-----------------------------+-----------
 created | timestamp without time zone |

검색어 :

select created, extract(epoch from created) from my_table;

          created          |    date_part
---------------------------+------------------
 2011-05-17 13:18:48.03266 | 1305634728.03266
 1970-01-01 00:00:00       |            -3600


select created, extract(epoch from date_trunc('milliseconds', created)) 
from my_table;

          created          |    date_part
---------------------------+------------------
 2011-05-17 13:18:48.03266 | 1305634728.03266
 1970-01-01 00:00:00       |            -3600


select created, extract(epoch from created at time zone 'UTC') from my_table;

          created          |    date_part
---------------------------+------------------
 2011-05-17 13:18:48.03266 | 1305638328.03266
 1970-01-01 00:00:00       |                0

date_part세 번째 쿼리의 참고 사항 은 다음과 같습니다. 130563 83 28.03266-3600 다릅니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.