PostgreSQL এ টাইমস্ট্যাম্প থেকে তারিখ (yyyy / মিমি / ডিডি) উত্তোলন করুন Ext


250

আমি পোস্টগ্রিজ এসকিউএল-র একটি টাইমস্ট্যাম্প থেকে কেবল তারিখের অংশটি বের করতে চাই।

আমার এটি একটি পোস্টগ্র্যাস্কল DATEটাইপ হওয়া দরকার যাতে আমি এটি অন্য সারণীতে সন্নিবেশ করতে পারি যা একটি DATEমান আশা করে exp

উদাহরণস্বরূপ, আমার কাছে থাকলে 2011/05/26 09:00:00আমি চাই2011/05/26

আমি কাস্ট করার চেষ্টা করেছি, তবে আমি কেবল ২০১১ পেয়েছি:

timestamp:date
cast(timestamp as date)

আমি চেষ্টা to_char()সঙ্গে to_date():

SELECT to_date(to_char(timestamp, 'YYYY/MM/DD'), 'YYYY/MM/DD') 
FROM val3 WHERE id=1;

আমি এটিকে একটি ফাংশন করার চেষ্টা করেছি:

CREATE OR REPLACE FUNCTION testing() RETURNS void AS '
DECLARE i_date DATE;
BEGIN
    SELECT to_date(to_char(val1, "YYYY/MM/DD"),"YYYY/MM/DD") 
      INTO i_date FROM exampTable WHERE id=1;
    INSERT INTO foo(testd) VALUES (i);
END

PostgreSQL এ টাইমস্ট্যাম্প থেকে তারিখ (yyyy / মিমি / ডিডি) উত্তোলনের সর্বোত্তম উপায় কী?

উত্তর:


432

আপনি নিজের টাইমস্ট্যাম্পটির সাথে প্রত্যয় রেখে একটি তারিখে কাস্ট করতে পারেন ::date। এখানে, পিএসকিএল-তে একটি টাইমস্ট্যাম্প রয়েছে:

# select '2010-01-01 12:00:00'::timestamp;
      timestamp      
---------------------
 2010-01-01 12:00:00

এখন আমরা এটি একটি তারিখে ফেলে দেব:

wconrad=# select '2010-01-01 12:00:00'::timestamp::date;
    date    
------------
 2010-01-01

অন্যদিকে আপনি date_truncফাংশন ব্যবহার করতে পারেন । তাদের মধ্যে পার্থক্যটি হ'ল পরবর্তী timestamptzসময়টি একই টাইপের টাইপ দেয় যেমন আপনার সময় অঞ্চলটি অক্ষত রাখার মতো (যদি আপনার প্রয়োজন হয়)।

=> select date_trunc('day', now());
       date_trunc
------------------------
 2015-12-15 00:00:00+02
(1 row)

3
কাজ করে না, কেবল "2010-01-01 12:00:00 ':: টাইমস্ট্যাম্প :: তারিখ নির্বাচন করার চেষ্টা করেছি;" । এটি কেবল ২০১১ সালে ফিরে আসে i
কেরেন

1
@ কেরেনক, এখন এটি অদ্ভুত। আপনি কি পিএসএইচএল এ চেষ্টা করেছেন?
ওয়েইন কনরাড

40
@ কেরেন, পিএসকিএল হ'ল একটি কমান্ড-লাইন ইউটিলিটি - আপনি এটি ব্যবহার করছেন না (তবে এটি বিবেচনা করুন)। আপনি যখন pgadmin3 এ ক্যোয়ারি চালাবেন, তখন ডাটা আউটপুট ফলকটি দেখুন। আপনি কলামগুলির আকার পরিবর্তন করতে পারেন; পুরো তারিখটি দেখানোর জন্য ডিফল্ট কলামের আকার খুব ছোট এবং কেবল বছরটি দেখায়। এই কলামটি প্রসারিত করতে আপনার মাউসটি ব্যবহার করুন এবং আপনাকে পুরো জিনিসটি দেখতে হবে।
ওয়েইন কনরাড

11
আপনি ঠিক বলেছেন। আমি খুব বোকা বোকা অনুভব করছি. এটা ইশারা জন্য ধন্যবাদ.
কেরেন

একটি মামলা আমি দৌড়েছি যেখানে এটি কাজ করে না কাঠবিড়ালিতে। এই বাক্য গঠনটির সাথে, কাঠবিড়ালি আপনাকে ": তারিখ" প্যারামিটারের জন্য ইনপুট প্যারামিটার মানগুলিতে একটি ইনপুট বাক্স দেবে।
জেমস কিংসবেরি

104

তারিখ ফাংশন ব্যবহার করুন :

select date(timestamp_field) from table

একটি অক্ষরের ক্ষেত্রের প্রতিনিধিত্ব থেকে একটি তারিখ আপনি ব্যবহার করতে পারেন:

select date(substring('2011/05/26 09:00:00' from 1 for 10));

পরীক্ষার কোড:

create table test_table (timestamp_field timestamp);
insert into test_table (timestamp_field) values(current_timestamp);
select timestamp_field, date(timestamp_field) from test_table;

পরীক্ষার ফলাফল:

pgAdmin ফলাফল

pgAdmin ফলাফল প্রশস্ত


1
আমি চেষ্টা করেছি কিন্তু আমি কেবল
২০১১/০5/২

আমি বুঝতে পেরেছি আপনি টাইমট্যাম্প ডেটা টাইপের সাথে কাজ করছেন না। আপনার প্রদত্ত ফর্ম্যাটটিতে টাইমস্ট্যাম্পের স্ট্রিং উপস্থাপনার সাথে কাজ করার জন্য সংশোধিত।
জেমস অলম্যান

আপনি কীভাবে স্কিল চালাচ্ছেন? psql?
জেমস অলম্যান

আমি ব্যবহার করছি pgAdmin তৃতীয় postgresSQL
Keren

11
আমি লক্ষ্য করেছি যে আমি যখন পিজএডমিন তৃতীয়তে একটি পরীক্ষা করি তখন 'তারিখ' কলামটি বছরটি প্রদর্শন করার জন্য যথেষ্ট প্রশস্ত। পুরো তারিখটি দেখার জন্য কলামের হ্যান্ডেলটি ধরুন এবং কলামটি প্রসারিত করুন।
জেমস অলম্যান

10

আপনি কি এটি দিয়ে একটি তারিখে কাস্ট করার চেষ্টা করেছেন <mydatetime>::date?


1
এটি ঠিক কাজ করে। ওয়েন কনরাদের উত্তরের মন্তব্যে যেমন উল্লেখ করা হয়েছে, ক্যারেনকে পিজিএডমিনের আউটপুট ফলকের অতিরিক্ত সংকীর্ণ কলাম দ্বারা পথভ্রষ্ট করা হয়েছিল।
কেনবি

9

এটি অজগর ২.7 এ আমার জন্য কাজ করে

 select some_date::DATE from some_table;

4
CREATE TABLE sometable (t TIMESTAMP, d DATE);
INSERT INTO sometable SELECT '2011/05/26 09:00:00';
UPDATE sometable SET d = t; -- OK
-- UPDATE sometable SET d = t::date; OK
-- UPDATE sometable SET d = CAST (t AS date); OK
-- UPDATE sometable SET d = date(t); OK
SELECT * FROM sometable ;
          t          |     d      
---------------------+------------
 2011-05-26 09:00:00 | 2011-05-26
(1 row)

আরেকটি পরীক্ষার কিট:

SELECT pg_catalog.date(t) FROM sometable;
    date    
------------
 2011-05-26
(1 row)

SHOW datestyle ;
 DateStyle 
-----------
 ISO, MDY
(1 row)

আমি কেবল আপনার পিজএডমিনে চেষ্টা করেছিলাম তবে কেবলমাত্র ২০১১ এর পুরো তারিখ নেই যা আমার প্রয়োজন! :(
কেরেন

@ কেরেন: SELECT pg_catolog.date সম্পর্কে ('2011/05/26 09:00:00'); ?
গ্রজেগোর্জ সাজেপেটকোভস্কি

হতে পারে আউটপুট মান ফর্ম্যাট করার সাথে এর কিছু আছে। আমি ভাবছি যে রিটার্ন মান সম্ভবত সেখানে দিন এবং মাস আছে, কিন্তু এটি ঠিক স্ক্রিতে প্রদর্শিত হয় না?
কেরেন

শো তারিখের স্টাইল টাইপিং; আমাকে "আইএসও, ডিএমওয়াই" গেম করুন
কেরেন

4

শুধু করুন select date(timestamp_column)এবং আপনি একমাত্র তারিখের অংশটি পাবেন। কখনও কখনও করা যেখানে অংশটি সরিয়ে না দেয় সেখানে select timestamp_column::dateফিরে আসতে পারে । তবে আমি সব ক্ষেত্রে নিখুঁতভাবে কাজ করতে দেখেছি । আশাকরি এটা সাহায্য করবে.date 00:00:0000:00:00date(timestamp_column)


3

পোস্টগ্র্যাগে কেবল: জমা দেওয়া তারিখ হিসাবে TO_CHAR (টাইমস্ট্যাম্প_কলাম, 'ডিডি / এমএম / ওয়াইওয়াইওয়াই')

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.