आप GUC पैरामीटर के साथ खेल सकते हैं datestyle
और timezone
आप जो चाहते हैं उसे पाने के लिए एक समारोह के अंदर। यहां एक उदाहरण दिया गया है (हालांकि, यह माइक्रोसेकंड लौटाता है, इसलिए शायद आपको इसे थोड़ा ट्यून करना होगा):
create or replace function timestamp_iso8601(ts timestamptz, tz text) returns text as $$
declare
res text;
begin
set datestyle = 'ISO';
perform set_config('timezone', tz, true);
res := ts::timestamptz(3)::text;
reset datestyle;
reset timezone;
return replace(res, ' ', 'T') || ':00';
end;
$$ language plpgsql volatile;
परिणाम:
test=# select timestamp_iso8601(now()::timestamptz, 'Europe/Moscow');
timestamp_iso8601
-------------------------------
2017-07-12T08:56:58.692985+03:00
test=# select timestamp_iso8601(now()::timestamptz, 'Pacific/Auckland');
timestamp_iso8601
-------------------------------
2017-07-12T17:59:05.863483+12:00
(1 row)
अद्यतन:संपादित। आप timestamptz(3)
. का उपयोग कर सकते हैं , परिशुद्धता . निर्दिष्ट करते हुए (डिफ़ॉल्ट रूप से, यह माइक्रोसेकंड के साथ जाएगा, जबकि 3
केवल मिलीसेकंड रखेगा)। वैकल्पिक रूप से, आप उपयोग कर सकते हैं res := to_char(ts::timestamptz, 'IYYY-MM-DDT HH24:MI:SS:MSOF');
इसके बजाय ::timestamptz(3)::text
रूपांतरण श्रृंखला, और इस मामले में (3)
जरूरत नहीं होगी।