आप किसी विशेष प्रारूप में टाइमस्टैम्प नहीं डालते हैं। टाइमस्टैम्प (और दिनांक) डेटाबेस में एक आंतरिक प्रतिनिधित्व का उपयोग करके संग्रहीत किया जाता है, जो कि प्रकार और सटीकता के आधार पर 7 और 11 बाइट्स के बीच होता है। इस प्रश्न में इसके बारे में और भी बहुत कुछ है , दूसरों के बीच में।
आपका क्लाइंट या एप्लिकेशन यह तय करता है कि मान को मानव-पठनीय स्ट्रिंग फॉर्म में कैसे प्रदर्शित किया जाए।
जब आप करते हैं:
to_timestamp(localtimestamp,'YYYY/MM/DD')
आप परोक्ष रूप से localtimestamp
. को रूपांतरित कर रहे हैं एक स्ट्रिंग के लिए, अपने सत्र की NLS सेटिंग्स का उपयोग करके, और फिर इसे वापस टाइमस्टैम्प में परिवर्तित करना। यह संयोग से मूल्य को बदल सकता है - सटीकता खोना - लेकिन यह नहीं बदलेगा कि मूल्य आंतरिक रूप से कैसे संग्रहीत किया जाता है। आपके मामले में NLS सेटिंग और आपके द्वारा आपूर्ति किए जा रहे प्रारूप के बीच बेमेल होने के कारण ORA-01830 त्रुटि हो रही है।
तो आपका पहला सम्मिलन सही है (मान लीजिए कि आप वास्तव में सत्र समय चाहते हैं, सर्वर समय नहीं)। अगर आप देखना चाहते हैं किसी विशेष प्रारूप में संग्रहीत मान या तो अपने क्लाइंट सत्र की एनएलएस सेटिंग्स को बदल दें, या जब आप इसे क्वेरी करते हैं तो इसे स्पष्ट रूप से प्रारूपित करें, जैसे:
select to_char(time, 'YYYY-MM-DD HH24:MI:SS.FF3') from activity_log