PostgreSQL से केवल मिलीसेकंड में टाइमस्टैम्प कॉलम कैसे प्राप्त करें?


29

मेरे पास timestamp without time zone default now()PostgreSQL डेटाबेस में टाइप के साथ एक कॉलम "बनाया" है ।

यदि मैं कॉलम्स का चयन करता हूं, तो इसका प्रति डिफ़ॉल्ट एक अच्छा और पठनीय प्रारूप है:

SELECT created FROM mytable;

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

लेकिन मैं केवल मिलीसेकंड (एक लंबे समय के रूप में) में टाइमस्टैम्प प्राप्त करना चाहूंगा। कुछ इस तरह:

Myformat का चयन करें (निर्मित) 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यूनिक्स-टाइमस्टैम्प का उपयोग करें

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

देना होगा

1305621628876.94

इसे 1000मिलीसेकंड में बदलने के लिए इसे गुणा करें । फिर आप इसे अपनी इच्छानुसार परिवर्तित कर सकते हैं ( दशमलव एक अच्छा विकल्प होगा)। समय-सीमा को ध्यान में रखना न भूलें। JackPDouglas ने अपने जवाब में ऐसा उदाहरण दिया है । यहाँ उनके जवाब का एक अंश है ( createdआपके समयरेखा के साथ कॉलम होना) जो दिखाता है कि टाइमज़ोन के साथ कैसे काम किया जाए:

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

5

--EDIT--

मैंने इसे खोज लिया है (नीचे देखें) मूल रूप से गलत है। देखें कि मुझे 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 अलग।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.