PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL में दो तिथियों के बीच अंतराल कैसे खोजें

समस्या:

आप PostgreSQL डेटाबेस में दो दिनांक/डेटाटाइम मानों के बीच अंतर खोजना चाहेंगे।

उदाहरण:

हमारे डेटाबेस में employment कॉलम में डेटा के साथ id , first_name , last_name , start_date , और end_date :

<थ>प्रथम_नाम <थ>प्रारंभ_दिनांक <थ>समाप्ति_तिथि
आईडी last_name
1 बारबरा विल्सन 2010-02-01 2018-10-30
2 रॉबर्ट एंडरसन 2001-04-17 2011-12-20
3 स्टीवन नेल्सन 2005-06-01 2019-09-23

प्रत्येक कर्मचारी के लिए, आइए उनका पहला और अंतिम नाम और उनके रोजगार की शुरुआत और समाप्ति तिथियों के बीच का अंतर प्राप्त करें। हम वर्षों, महीनों और दिनों में अंतराल देखना चाहते हैं।

समाधान 1:

हम AGE() . का इस्तेमाल करेंगे समारोह। यहां वह प्रश्न है जो आप लिखेंगे:

SELECT first_name, 
             last_name, 
             AGE(end_date, start_date) 
         AS  employment_interval 
FROM employment;

ये रहा क्वेरी का नतीजा:

<थ>पहला_नाम
last_name रोज़गार_अंतराल
बारबरा विल्सन 8 साल 8 महीने 29 दिन
रॉबर्ट एंडरसन 10 साल 8 महीने 3 दिन
स्टीवन नेल्सन 14 साल 3 महीने 22 दिन

चर्चा:

PostgreSQL AGE() का उपयोग करें दो टाइमस्टैम्प या तिथियों के बीच के अंतराल को पुनः प्राप्त करने के लिए कार्य करता है। यह फ़ंक्शन दो तर्क लेता है:पहला अंतिम दिनांक है और दूसरा प्रारंभ दिनांक है। हमारे उदाहरण में, हम end_date . कॉलम का उपयोग करते हैं (अर्थात जब कर्मचारी ने वह काम करना बंद कर दिया) और कॉलम start_date (जब कर्मचारी ने वह काम शुरू किया)।

तिथियों के बीच का अंतर वर्षों, महीनों, दिनों, घंटों आदि में अंतराल के रूप में दिया जाता है। स्टीवन नेल्सन के लिए क्वेरी रोजगार की अवधि को अंतराल के रूप में लौटाया '14 years 3 months 22 days '; यह 2005-06-01 के बीच का अंतर है, जब उन्होंने यह काम शुरू किया और 2019-09-23, जब उन्होंने इसे रोका।

AGE() फ़ंक्शन वर्तमान टाइमस्टैम्प/दिनांक और पहले तर्क के बीच अंतर भी प्रदर्शित कर सकता है। इस मामले में, फ़ंक्शन का केवल एक तर्क है:

SELECT first_name,
             last_name,
             AGE(end_date)
         AS  employment_interval
FROM employment;

उपरोक्त क्वेरी वर्तमान टाइमस्टैम्प (इस पाठ के लिए, यह '2019-09-26' है) और प्रत्येक कर्मचारी की समाप्ति तिथि (स्तंभ end_date के बीच के अंतराल को प्रदर्शित करती है। )।

<थ>पहला_नाम
last_name रोज़गार_अंतराल
बारबरा विल्सन 10 महीने 27 दिन
रॉबर्ट एंडरसन 7 साल 9 महीने 6 दिन
स्टीवन नेल्सन 3 दिन

स्टीवन के काम पर आखिरी दिन और वर्तमान टाइमस्टैम्प के बीच तीन दिन बीत चुके हैं (लेखन के समय, यह 2019-09-26 है)।

समाधान 2:

आप AGE() . की जगह माइनस ऑपरेटर ('-') का भी इस्तेमाल कर सकते हैं दो तिथियों को घटाने के लिए।

यहां वह प्रश्न है जो आप लिखेंगे:

SELECT first_name,
             last_name,
             end_date::DATE – start_date::DATE 
         AS  employment_interval 
FROM employment;

इस परिणाम में, आप केवल दिनों में अंतर देखेंगे (वर्षों, महीनों और दिनों में नहीं):

<थ>पहला_नाम
last_name रोज़गार_अंतराल
बारबरा विल्सन 3193
रॉबर्ट एंडरसन 3899
स्टीवन नेल्सन 5227

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres SQL में `->>` और `->` में क्या अंतर है?

  2. PHP pg_connect () के साथ PostgreSQL से कनेक्ट नहीं हो सकता

  3. PostgreSQL में एक तिथि से दिन का नाम प्राप्त करें

  4. PostgreSQL 10 में ICU समर्थन के साथ अधिक मजबूत संयोजन

  5. org.postgresql.util.PSQLException:FATAL:क्षमा करें, पहले से ही बहुत सारे ग्राहक हैं