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

PostgreSQL में टाइमज़ोन () फ़ंक्शन कैसे काम करता है

PostgreSQL में, आप timezone() . का उपयोग कर सकते हैं टाइमस्टैम्प को दूसरे टाइमज़ोन में बदलने के लिए कार्य करता है।

सिंटैक्स

वाक्य रचना इस प्रकार है:

timezone(zone, timestamp)

जहां zone वह समय क्षेत्र है जिसे आप timestamp चाहते हैं में परिवर्तित करने का तर्क।

आपको मिलने वाला परिणाम इस बात पर निर्भर करेगा कि मूल टाइमस्टैम्प मान में टाइमज़ोन शामिल है या नहीं (और वह मान क्या है)।

उदाहरण 1 -जब मूल टाइमस्टैम्प में टाइमज़ोन शामिल हो

यहां बताया गया है कि जब मूल टाइमस्टैम्प में टाइमज़ोन शामिल होता है तो क्या होता है।

SELECT timezone('Indian/Mauritius', timestamp with time zone '2020-10-25 00:00:00+00');

परिणाम:

2020-10-25 04:00:00

जब मूल टाइमस्टैम्प में टाइमज़ोन शामिल होता है, तो timezone() फ़ंक्शन मूल टाइमस्टैम्प मान को निर्दिष्ट समय क्षेत्र में स्थानांतरित करता है, और बिना समय क्षेत्र के मान लौटाता है।

अगर मैं इनपुट टाइमस्टैम्प का समय क्षेत्र बदलता हूं, तो यहां बताया गया है।

SELECT timezone('Indian/Mauritius', timestamp with time zone '2020-10-25 00:00:00+01');

परिणाम:

2020-10-25 03:00:00

परिणामी टाइमस्टैम्प को इनपुट टाइमज़ोन के अनुसार स्थानांतरित कर दिया जाता है।

और यदि आप timestamp with time zone निर्दिष्ट करते हैं , लेकिन मूल टाइमस्टैम्प में वास्तव में टाइमज़ोन शामिल नहीं होता है, फिर मूल टाइमस्टैम्प मान को स्थानीय टाइमज़ोन में स्थानांतरित कर दिया जाता है।

SELECT timezone('Indian/Mauritius', timestamp with time zone '2020-10-25 00:00:00');

परिणाम:

2020-10-24 18:00:00

इस मामले में, परिणामी टाइमस्टैम्प छह घंटे पीछे रख दिया गया है। इसका मतलब है कि मेरा स्थानीय समय क्षेत्र भारतीय/मॉरीशस से छह घंटे आगे है।

हम उस समयक्षेत्र ऑफ़सेट को देख सकते हैं जिसका उपयोग सीधे इनपुट मान का चयन करके किया गया था।

SELECT timestamp with time zone '2020-10-25 00:00:00';

परिणाम:

2020-10-25 00:00:00+10

उदाहरण 2 - जब मूल टाइमस्टैम्प में टाइमज़ोन शामिल न हो

यहां बताया गया है कि जब मूल टाइमस्टैम्प नहीं होता तो क्या होता है एक समय क्षेत्र शामिल करें।

SELECT timezone('Indian/Mauritius', timestamp without time zone '2020-10-25 00:00:00');

परिणाम:

2020-10-25 06:00:00+10

जब मूल टाइमस्टैम्प में टाइमज़ोन शामिल नहीं होता है, तो परिणाम वर्तमान TimeZone का उपयोग करके प्रदर्शित किया जाता है। सेटिंग और टाइमज़ोन ऑफ़सेट संलग्न है।

यह किसी भी समय लागू होता है जब आप timestamp without time zone निर्दिष्ट करते हैं , भले ही टाइमस्टैम्प में वास्तव में टाइमज़ोन ऑफ़सेट हो।

SELECT timezone('Indian/Mauritius', timestamp without time zone '2020-10-25 00:00:00+12');

परिणाम:

2020-10-25 06:00:00+10

यह उम्मीद की जानी चाहिए, क्योंकि अगर मैं केवल timestamp without time zone का चयन करता हूं मान, मुझे यही मिलता है:

SELECT timestamp without time zone '2020-10-25 00:00:00+12';

परिणाम:

2020-10-25 00:00:00

उदाहरण 3 - लोकलटाइमस्टैम्प

आइए localtimestamp का उपयोग करें मेरे अपने टाइमज़ोन में वर्तमान टाइमस्टैम्प और timezone() का उपयोग करने के बाद परिणामी टाइमस्टैम्प के बीच तुलना चलाने के लिए कार्य करता है इसे एक अलग समय क्षेत्र में बदलने के लिए कार्य करता है।

\x
SELECT 
  localtimestamp,
  timezone('Indian/Mauritius', localtimestamp);

परिणाम:

localtimestamp | 2020-07-08 15:42:04.965221
timezone       | 2020-07-08 21:42:04.965221+10

localtimestamp फ़ंक्शन एक टाइमस्टैम्प देता है डेटा प्रकार, जो एक अंतर्निहित "बिना समय क्षेत्र" के साथ आता है। दूसरे शब्दों में, टाइमस्टैम्प और बिना समय क्षेत्र के टाइमस्टैम्प एक ही बात हैं।

जैसा कि पहले दिखाया गया है, जब मूल टाइमस्टैम्प में कोई टाइमज़ोन निर्दिष्ट नहीं किया जाता है, तो वर्तमान TimeZone सेटिंग का उपयोग किया जाता है और परिणाम में जोड़ा जाता है। और इसलिए localtimestamp . का उपयोग करते समय हमें यही मिलता है ।

वैसे, इस उदाहरण में मैंने \x . का उपयोग किया है केवल पढ़ने में आसान बनाने के लिए, विस्तारित डिस्प्ले/वर्टिकल आउटपुट का उपयोग करके परिणाम प्रदर्शित करने के लिए।

उदाहरण 4 - current_timestamp

आइए अब current_timestamp का उपयोग करें localtimestamp के बजाय कार्य करें ।

SELECT 
  current_timestamp,
  timezone('Indian/Mauritius', current_timestamp);

परिणाम (ऊर्ध्वाधर आउटपुट का उपयोग करके):

current_timestamp | 2020-07-08 15:42:04.335669+10
timezone          | 2020-07-08 09:42:04.335669

इस बार टाइमज़ोन ऑफ़सेट को मूल टाइमस्टैम्प में जोड़ दिया गया है, और timezone() परिणाम में अब यह शामिल नहीं है।

हमें यह परिणाम इसलिए मिलता है क्योंकि current_timestamp फ़ंक्शन समय क्षेत्र के साथ टाइमस्टैम्प returns देता है डेटा प्रकार।

उदाहरण 5 - समय मानों का उपयोग करना

timezone() फ़ंक्शन time के साथ भी काम करता है मान (time with time zone और time without time zone )।

हालांकि, time with time zone . पर इसका उपयोग करते समय मान, समय क्षेत्र ऑफ़सेट को परिणाम में जोड़ दिया जाता है।

SELECT 
  timezone('Indian/Mauritius', time with time zone '00:00:00+00'),
  timezone('Indian/Mauritius', time with time zone '00:00:00+01'),
  timezone('Indian/Mauritius', time with time zone '00:00:00');

परिणाम (ऊर्ध्वाधर आउटपुट का उपयोग करके):

timezone | 04:00:00+04
timezone | 03:00:00+04
timezone | 18:00:00+04

और पूर्णता के लिए, यहां वही मान दिए गए हैं जो time without time zone का उपयोग कर रहे हैं डेटा प्रकार।

SELECT 
  timezone('Indian/Mauritius', time without time zone '00:00:00+00'),
  timezone('Indian/Mauritius', time without time zone '00:00:00+01'),
  timezone('Indian/Mauritius', time without time zone '00:00:00');

परिणाम (ऊर्ध्वाधर आउटपुट का उपयोग करके):

timezone | 18:00:00+04
timezone | 18:00:00+04
timezone | 18:00:00+04

स्थानीय समय क्षेत्र जांचें

यदि आप अपना स्थानीय समय क्षेत्र देखना चाहते हैं, तो SHOW TIMEZONE run चलाएँ ।

जब मैं उस आदेश को चलाता हूं तो मुझे यही मिलता है।

SHOW TIMEZONE;

परिणाम:

Australia/Brisbane

टाइमज़ोन ऑफ़सेट जांचें

उपरोक्त ज्ञान से लैस, अब मैं pg_timezone_names को क्वेरी करके दो टाइमज़ोन ऑफ़सेट की जांच कर सकता हूं देखें।

SELECT * 
FROM pg_timezone_names
WHERE name = 'Indian/Mauritius'
OR name = 'Australia/Brisbane';

परिणाम (ऊर्ध्वाधर आउटपुट का उपयोग करके):

name                | abbrev | utc_offset | is_dst
--------------------+--------+------------+--------
Indian/Mauritius    | +04    | 04:00:00   | f
Australia/Brisbane  | AEST   | 10:00:00   | f

पोस्टग्रेज़ में टाइमज़ोन वापस करने के लिए अधिक विकल्पों और उदाहरणों के लिए पोस्टग्रेएसक्यूएल द्वारा समर्थित टाइमज़ोन की सूची लौटाएं देखें।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. अद्वितीय डेटाटाइम सीमा के लिए पोस्टग्रेज बाधा

  2. PostgreSQL से PL/pgSQL आउटपुट को CSV फ़ाइल में सेव करें

  3. PostgreSQL में ON CONFLICT के साथ RETURNING का उपयोग कैसे करें?

  4. बेंचमार्क संग्रह के साथ PostgreSQL परीक्षण टूल में अपडेट

  5. .sql postgresql बैकअप से एकल तालिका को कैसे पुनर्स्थापित करें?