बिना पोस्ट_चर्च () फ़ंक्शन के उपयोग के PostgreSQL में तारीख से वर्ष और महीने कैसे निकालें?


104

मैं sql का चयन करना चाहता हूं: SELECT "year-month" from table group by "year-month" AND order by dateजहां वर्ष-माह - दिनांक "1978-01", "1923-12" के लिए प्रारूप। couse काम का चयन करें , लेकिन "सही" आदेश नहीं:

to_char(timestamp_column, 'YYYY-MM')

1
क्यों आदेश to_char के साथ सही नहीं है?
येरचू

1
अस्पष्ट के रूप में बंद करने के लिए मतदान क्योंकि यह स्पष्ट नहीं है कि क्यों to_char () स्वीकार्य नहीं है।
एलेक्स आर

जवाबों:


68
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/functions-datetime.html


5
महीने और साल को एक साथ कैसे निकालें? क्या आप एक उदाहरण दिखा सकते हैं
मोक्षनाथ

3
date_part ('महीना', टाइमस्टैम्प '2001-02-16 20:38:40'), date_part ('वर्ष', टाइमस्टैम्प '2001-02-16 20:38:40')
MK।

त्वरित उत्तर के लिए धन्यवाद, लेकिन क्या हम इसे एकल फ़ंक्शन में नहीं कर सकते हैं या क्या हमें इसे महीने और साल के लिए दो बार अलग से कॉल करना होगा
mokNathal

2
तुम क्या करने की कोशिश कर रहे हो? बस एक तार मिलता है? फिर एक तारीख प्रारूप के साथ of_char फ़ंक्शन का उपयोग करें जिसे आपको postgresql.org/docs/8.2/static/functions-formatting.html
MK की

181
to_char(timestamp, 'YYYY-MM')

आप कहते हैं कि आदेश "सही" नहीं है, लेकिन मैं यह नहीं देख सकता कि यह गलत क्यों है (कम से कम वर्ष 10000 के आसपास आता है)।


यदि आप "टाइमस्टैम्प" के साथ काम कर रहे हैं तोचार (to_timestamp (e। "टाइमस्टैम्प"), 'MM-YYYY')
ब्रूनो ली

@BrunoMarinho यदि आप एक कालानुक्रमिक क्रम चाहते हैं, तो 'ऑर्डर देने के लिए केवल MM-YYYY' का उपयोग न करें। यदि आप चाहते हैं कि आप अभी भी उस प्रारूप में एक कॉलम प्रदर्शित कर सकते हैं, लेकिन इसके द्वारा आदेश नहीं देते हैं
yairchu

4
मुझे समझ नहीं आता कि यह स्वीकृत उत्तर क्यों नहीं है।
प्रबावो मूर्ति

इस मामले में, आप ORDER BYतिथि नहीं कर सकते ।
अघजलपंकज

1
@ एविएटर: आप उपयोग कर सकते हैं ORDER BY to_char(timestamp, 'YYYY-MM')। या वैकल्पिक रूप से यदि आपने किया है तो आप SELECT to_char(timestamp, 'YYYY-MM') AS dateबस उपयोग कर सकते हैं ORDER BY date
यारचू

38

date_truncदिन (या जो कुछ भी, जैसे, सप्ताह, वर्ष, दिन, आदि) को बंद करने के लिए विधि का उपयोग करें ।)

महीने के अनुसार बिक्री से समूहीकरण का उदाहरण:

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

1
ये सही है। यू की तुलना करने के लिए उपयोग कर सकते हैं: दिनांक (दिनांक_trunc ('माह', अब) ()) to_Date (5 :: varcharhd '' '|| 2017 :: varchar,' mm YYYY ')
एलेजांद्रो सलमानक Mazuelo

दो बार "to_char (टाइमस्टैम्प, 'YYYY-MM') की तुलना में तेज़" जो अच्छा भी है।
ली ड्रॉइड

20

उपयोग करने वाले महीने के बाद आप सभी सूचनाओं को काट सकते हैं 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

16

पहला विकल्प

date_trunc('month', timestamp_column)::date

यह एक दिन से शुरू होने वाले सभी महीनों के साथ तारीख प्रारूप को बनाए रखेगा।

उदाहरण:

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

दूसरा विकल्प

to_char(timestamp_column, 'YYYY-MM')

@Yairchu द्वारा प्रस्तावित इस समाधान ने मेरे मामले में ठीक काम किया। मैं वास्तव में 'दिन' की जानकारी को त्यागना चाहता था।


11

आप EXTRACT फ़ंक्शन pgSQL का उपयोग कर सकते हैं

EX- date = 1981-05-31
EXTRACT(MONTH FROM date)
it will Give 05

अधिक जानकारी के लिए PGSQL तिथि-समय


1

यह "से अधिक" कार्यों के लिए काम कर रहा है जो इससे कम के लिए नहीं है।

उदाहरण के लिए:

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;

मुझे त्रुटि हो रही है।


यह कम से कम नहीं कार्यों के लिए अधिक से अधिक के लिए काम कर रहा है। उदाहरण के लिए: date_part ('year', txndt) से "table_name" चुनें जहाँ date_part ('वर्ष', txndt)> '2000' की सीमा 10; ठीक काम कर रहा है। लेकिन select_part ('वर्ष', txndt) के लिए "hpi_validator_q3" से। "cdm_inv_exception" जहां date_part ('वर्ष', txndt) <2000 "सीमा 10; मुझे त्रुटि हो रही है।
अनुराग भारद्वाज

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