यदि डेटा पहले से ही Oracle SQL तालिका में है, और आपको समय क्षेत्र के साथ टाइमस्टैम्प में कनवर्ट करना होगा (उदाहरण के लिए, उसी तालिका में आपके द्वारा बनाए गए नए कॉलम में), तो आपको स्पष्ट रूप से OS पर जाने की आवश्यकता नहीं है, या Oracle डेटाबेस के अलावा जावा या किसी अन्य चीज़ का उपयोग करें।
यह आपके प्रश्न से स्पष्ट नहीं है कि क्या आपको "दिनांक" सर्वर समय क्षेत्र में होना चाहिए था (आप "डेटाबेस" का उल्लेख करते हैं जिसका सामान्य रूप से सर्वर का अर्थ है) या क्लाइंट टाइम ज़ोन (आप "सत्र" का उल्लेख करते हैं जिसका अर्थ है ग्राहक)। किसी भी तरह:
update <your_table>
set <timestamp_with_time_zone_col> =
from_tz(cast<date_col> as timestamp, dbtimezone)
;
या sessiontimezone
. का उपयोग करें दूसरे तर्क के रूप में, यदि आपको यही चाहिए।
यह मानता है कि डेटाबेस (और/या सत्र) समय क्षेत्र क्लाइंट में क्रमशः डीबी में ठीक से स्थापित किया गया है। यदि ऐसा नहीं है/वे नहीं हैं, तो इसे पहले ठीक करने की आवश्यकता है। यदि पैरामीटर पहले स्थान पर सही ढंग से सेट किए गए हैं, तो Oracle दिन के समय की बचत को संभालने में पूरी तरह से सक्षम है। (और यदि वे नहीं हैं, तो यह स्पष्ट नहीं है कि आप अपने ऑपरेशन को पहले स्थान पर डेटाबेस के समर्थन की तुलना में "अधिक सही" होने का प्रयास क्यों करेंगे।)
उदाहरण:नीचे दिए गए खंड में, मैं एक कॉलम के साथ एक तालिका का अनुकरण करता हूं dt
डेटा प्रकार में date
. फिर मैं इसे timestamp with time zone
. में बदल देता हूं , मेरे सत्र (क्लाइंट) के समय क्षेत्र में।
with
my_table ( dt ) as (
select to_date('2018-06-20 14:30:00', 'yyyy-mm-dd hh24:mi:ss') from dual
)
select dt,
from_tz(cast(dt as timestamp), sessiontimezone) as ts_with_tz
from my_table
;
DT TS_WITH_TZ
------------------- -------------------------------------------------
2018-06-20 14:30:00 2018-06-20 14:30:00.000000000 AMERICA/LOS_ANGELES