পোস্টগ্রিএসকিউএল থেকে কেবলমাত্র মিনিসেকেন্ডে টাইমস্ট্যাম্প কলাম কীভাবে পাবেন?


29

আমার timestamp without time zone default now()একটি পোস্টগ্রিজ এসকিউএল ডাটাবেস টাইপ সহ একটি "কলাম তৈরি" হয়েছে ।

যদি আমি কলমগুলি নির্বাচন করি তবে এর ডিফল্ট হিসাবে একটি দুর্দান্ত এবং পঠনযোগ্য ফর্ম্যাট রয়েছে:

SELECT created FROM mytable;

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

তবে আমি কেবল মিলিসেকেন্ডে (দীর্ঘ হিসাবে) টাইমস্ট্যাম্পটি পেতে চাই। এটার মতো কিছু:

Mytable থেকে মাইফর্ম্যাট (তৈরি) নির্বাচন করুন;

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

পোস্টগ্রিএসকিউএল থেকে আমি কীভাবে টাইমস্ট্যাম্প কলামটি পেতে পারি?


জ্যাকের প্রতিক্রিয়া:

আমি আপনার (-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মিলি সেকেন্ডে পরিণত করতে এর দ্বারা গুণ করুন । তারপরে আপনি এটি যা চান তা রূপান্তর করতে পারবেন ( দশমিক একটি ভাল পছন্দ হবে)। সময় অঞ্চল মনে রাখতে ভুলবেন না। জ্যাকপিডগলাসের উত্তরে এমন উদাহরণ রয়েছে । এখানে তার উত্তরের একটি অংশ ( createdআপনার টাইম ট্যাম্পের সাথে কলাম হচ্ছে) যা টাইমজোনগুলির সাথে কীভাবে কাজ করবেন তা চিত্রিত করে:

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

5

--EDIT--

আমি এটি আবিষ্কার করেছি (নীচে দেখুন) মূলত ভুল। দেখুন পোস্টগ্রিএসএসকিউএল থেকে আমি কীভাবে বর্তমান ইউনিক্স টাইমস্ট্যাম্প পাব? আমার বিভ্রান্তির উত্সের জন্য ...

- শেষ সম্পাদনা -

উত্তর হিসাবে পোস্ট করা কারণ এটি কোনও মন্তব্য হিসাবে কাজ করবে না।

টেস্টবেড:

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.