समय क्षेत्र के लिए आप यह कर सकते हैं:
SHOW timezone;
या समकक्ष:
SELECT current_setting('TIMEZONE');
लेकिन यह सर्वर द्वारा स्वीकार किए गए किसी भी प्रारूप में हो सकता है, इसलिए यह UTC
लौटा सकता है , 08:00
, Australia/Victoria
, या समान।
निराशाजनक रूप से, ऐसा प्रतीत होता है कि यूटीसी से समय ऑफसेट की रिपोर्ट करने के लिए कोई अंतर्निहित फ़ंक्शन नहीं है जो क्लाइंट घंटों और मिनटों में उपयोग कर रहा है, जो मुझे पागल लगता है। आप UTC में वर्तमान समय की स्थानीय रूप से वर्तमान समय से तुलना करके ऑफ़सेट प्राप्त कर सकते हैं:
SELECT age(current_timestamp AT TIME ZONE 'UTC', current_timestamp)`
... लेकिन आईएमओ current_timestamp
से सेकंड में tz ऑफ़सेट निकालने के लिए क्लीनर है और एक अंतराल में कनवर्ट करें:
SELECT to_char(extract(timezone from current_timestamp) * INTERVAL '1' second, 'FMHH24:MM');
यह वांछित परिणाम से मेल खाएगा सिवाय इसके कि यह एक अग्रणी शून्य उत्पन्न नहीं करता है, इसलिए -05:00
बस -5:00
है . कष्टप्रद रूप से to_char
. प्राप्त करना असंभव प्रतीत होता है घंटों के लिए एक अग्रणी शून्य उत्पन्न करने के लिए, मुझे निम्नलिखित बदसूरत मैन्युअल स्वरूपण के साथ छोड़ रहा है:
CREATE OR REPLACE FUNCTION oracle_style_tz() RETURNS text AS $$
SELECT to_char(extract(timezone_hour FROM current_timestamp),'FM00')||':'||
to_char(extract(timezone_minute FROM current_timestamp),'FM00');
$$ LANGUAGE 'SQL' STABLE;
timezone_hour
. के लिए ग्लेन को श्रेय और timezone_minute
हैक के बजाय मैंने पहले extract(timezone from current_timestamp) * INTERVAL '1' second)
के साथ प्रयोग किया था और एक सीटीई।
यदि आपको अग्रणी शून्य की आवश्यकता नहीं है तो आप इसके बजाय इसका उपयोग कर सकते हैं:
CREATE OR REPLACE FUNCTION oracle_style_tz() RETURNS text AS $$
SELECT to_char(extract(timezone from current_timestamp) * INTERVAL '1' second, 'FMHH24:MM');
$$ LANGUAGE 'SQL' STABLE;
यह भी देखें: