To_char () ফাংশনটি ব্যবহার না করে পোস্টগ্রিসএসকিউএলে তারিখ থেকে বছর এবং মাস কীভাবে আহরণ করবেন?


113

আমি SELECT "year-month" from table group by "year-month" AND order by dateবর্গাকার নির্বাচন করতে চাই: যেখানে বছর-মাস - "1978-01" তারিখের জন্য ফর্ম্যাট, "1923-12"। মাউস কাজের ট্যুচচার নির্বাচন করুন , তবে "ডান" ক্রমটি নয়:

to_char(timestamp_column, 'YYYY-MM')

4
অর্ডার কেন টু_চর দিয়ে সঠিক নয়?
ইয়ারছু

4
অস্পষ্ট হিসাবে ভোট দেওয়ার জন্য ভোট দেওয়া কেননা তা_চ্যার () গ্রহণযোগ্য নয় কেন তা স্পষ্ট নয়।
অ্যালেক্স আর

উত্তর:


77
date_part(text, timestamp)

যেমন

date_part('month', timestamp '2001-02-16 20:38:40'),
date_part('year', timestamp '2001-02-16 20:38:40') 

http://www.postgresql.org/docs/8.0/interactive/function-datetime.html


5
একসাথে মাস এবং বছর কীভাবে উত্তোলন করা যায়? আপনি একটি উদাহরণ দেখাতে পারেন
মোকনাথাল

4
তারিখ_পর্ব ('মাস', টাইমস্ট্যাম্প '2001-02-16 20:38:40'), তারিখ_পর্ব ('বছর', টাইমস্ট্যাম্প '2001-02-16 20:38:40')
এমকে।

দ্রুত উত্তর দেওয়ার জন্য ধন্যবাদ, তবে আমরা এটি একক ফাংশনে করতে পারি না বা মাস এবং বছরের জন্য আলাদাভাবে আমাদের দুটি বার কল করতে হবে
মোকনাথাল

4
আপনি কি করতে চেষ্টা করছেন? শুধু একটি স্ট্রিং পেতে? তারপরে একটি তারিখের ফর্ম্যাট সহ টুচচার ফাংশনটি ব্যবহার করুন আপনার প্রয়োজন postgresql.org/docs/8.2/static/funitions-formatting.html
এমকে।

189
to_char(timestamp, 'YYYY-MM')

আপনি বলেছেন যে আদেশটি "সঠিক" নয়, তবে কেন এটি ভুল তা আমি দেখতে পাই না (কমপক্ষে বছর পর্যন্ত 10000 না আসা পর্যন্ত)।


আপনি যদি "টাইমস্ট্যাম্প" থেকে_চর (টো টাইমস্ট্যাম্প (উদাহরণস্বরূপ "টাইমস্ট্যাম্প"), 'এমএম-ওয়াইওয়াই')
ব্রুনো লি

@ ব্রুনোমারিনহো যদি আপনি কালানুক্রমিক আদেশ চান তবে কেবল 'অর্ডার দেওয়ার জন্য এমএম-ওয়াইওয়াইওয়াই' ব্যবহার করবেন না। আপনি যদি এটি প্রদর্শন করতে চান তবে আপনার এখনও সেই ফর্ম্যাটে একটি কলাম থাকতে পারে তবে এটি দিয়ে অর্ডার করবেন না
yairchu

4
কেন এটি গৃহীত উত্তর নয় তা আমি বুঝতে পারি না।
প্রভো মুর্তি

এই ক্ষেত্রে, আপনি ORDER BYতারিখ করতে পারবেন না ।
অজলপাঙ্কাজ

4
@ অ্যাভিয়েটার: আপনি ব্যবহার করতে পারেন ORDER BY to_char(timestamp, 'YYYY-MM')। অথবা বিকল্পভাবে যদি আপনি করেন SELECT to_char(timestamp, 'YYYY-MM') AS dateতবে কেবল ব্যবহার করতে পারেন ORDER BY date
ইয়ারছু

41

date_truncদিনটি কাটাতে পদ্ধতিটি ব্যবহার করুন (বা আপনি যা কিছু চান, যেমন, সপ্তাহ, বছর, দিন ইত্যাদি))

মাস দ্বারা আদেশ থেকে বিক্রয় গ্রুপিংয়ের উদাহরণ:

select
  SUM(amount) as sales,
  date_trunc('month', created_at) as date
from orders
group by date
order by date DESC;

4
সেটা ঠিক. আপনি তুলনা করতে ব্যবহার করতে পারেন: তারিখ (তারিখ_আরঙ্ক ('মাস', এখন ())) = থেকে_ তারিখ (5 :: বারচর || '' || 2017 :: বারচার, 'মিমি ওয়াইওয়াইওয়াই))
আলেজান্দ্রো সালামানকা মজুয়েলো

"টু_চর (টাইমস্ট্যাম্প, 'ওয়াইওয়াইওয়াই-এমএম')" এর চেয়ে দ্বিগুণ দ্রুত যা খুব ভাল।
লে ড্রয়েড

22

আপনি ব্যবহার করে মাসের পরে সমস্ত তথ্য ছাঁটাই করতে পারেন date_trunc(text, timestamp):

select date_trunc('month',created_at)::date as date 
from orders 
order by date DESC;


উদাহরণ:

ইনপুট:

created_at = '2019-12-16 18:28:13'

আউটপুট 1:

date_trunc('day',created_at)
// 2019-12-16 00:00:00

আউটপুট 2:

date_trunc('day',created_at)::date 
// 2019-12-16

আউটপুট 3:

date_trunc('month',created_at)::date 
// 2019-12-01

আউটপুট 4:

date_trunc('year',created_at)::date 
// 2019-01-01

17

1 ম বিকল্প

date_trunc('month', timestamp_column)::date

এটি সমস্ত মাসের প্রথম দিন থেকে শুরু করে তারিখের ফর্ম্যাটটি বজায় রাখবে।

উদাহরণ:

2016-08-01
2016-09-01
2016-10-01
2016-11-01
2016-12-01
2017-01-01

2 য় বিকল্প

to_char(timestamp_column, 'YYYY-MM')

@ আইয়ারচু প্রস্তাবিত এই সমাধানটি আমার ক্ষেত্রে ভাল কাজ করেছে। আমি সত্যিই 'দিন' তথ্য বাতিল করতে চেয়েছিলাম।



0

এটি কম "চেয়ে বেশি" ফাংশনের জন্য কাজ করছে।

উদাহরণ স্বরূপ:

select date_part('year',txndt)
from "table_name"
where date_part('year',txndt) > '2000' limit 10;

ভাল কাজ করছে।

না হইলে

select date_part('year',txndt)
from "table_name"
where date_part('year',txndt) < '2000' limit 10;

আমার ত্রুটি হচ্ছে


এটি এর চেয়ে কম ফাংশনগুলির জন্য কাজ করছে। উদাহরণস্বরূপ: তারিখ_ বিভাগ ('বছর', txndt) FROM "টেবিল_নাম" নির্বাচন করুন যেখানে তারিখ_ পার্ট ('বছর', txndt)> '2000' সীমা 10; ভাল কাজ করছে। তবে নির্বাচনের তারিখ_পর্বের জন্য ('বছর', txndt) FROM "এইচপিআইডাওয়েডিয়েটার_কি 3"। "সিডিএম_আইএনভি_অপত্তি" যেখানে তারিখ_ পার্ট ('বছর', txndt) <'2000' সীমা 10; আমার ত্রুটি হচ্ছে
অনুরাগ ভরদ্বাজ

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