मेरे पास इसमें एक timestamp
फ़ील्ड के साथ एक Oracle DB है। timestamp
इस क्षेत्र में सम्मिलित करने के लिए सही SQL कोड क्या है ?
मेरे पास इसमें एक timestamp
फ़ील्ड के साथ एक Oracle DB है। timestamp
इस क्षेत्र में सम्मिलित करने के लिए सही SQL कोड क्या है ?
जवाबों:
insert
into tablename (timestamp_value)
values (TO_TIMESTAMP(:ts_val, 'YYYY-MM-DD HH24:MI:SS'));
यदि आप चाहते हैं कि वर्तमान समय का टिकट तब डाला जाए:
insert
into tablename (timestamp_value)
values (CURRENT_TIMESTAMP);
TO_DATE
इसके बजाय क्यों TO_TIMESTAMP
?
INSERT
कथन के लिए कोई मायने नहीं रखता है , लेकिन सामान्य तौर पर आप इस तरह के बाँध चर का उपयोग नहीं करना चाहते हैं। आपके पहले कथन में टाइप रूपांतरण इसे संवेदनशील होने से रोकता है, जो अच्छे प्लान बनाने के लिए ओरेकल की क्षमता को सीमित करता है। यदि आप values (:ts_val)
इसके बजाय उपयोग करते हैं, तो अनुकूलक बेहतर कार्य कर सकता है : ts_val नक्शे सीधे टाइमस्टैम्प पर।
to_timestamp
योजना-सक्षम SQL स्टेटमेंट के लिए खराब निष्पादन योजना का उपयोग करना कैसे होगा? मैं एक उदाहरण दिखा सकता हूं कि यह कैसे नहीं होगा। इसके बजाय, जो मुझे लगता है कि हम सभी से बचना चाहते हैं अप्रत्याशित डेटा प्रकार जबरदस्ती है जो एक अपेक्षित पंक्ति स्रोत ऑपरेशन (यानी, इष्टतम एक) का उपयोग करने से रोकता है।
काइंड इस बात पर निर्भर करता है कि आप जो मूल्य डालना चाहते हैं वह कहां से आ रहा है। यदि आप वर्तमान समय सम्मिलित करना चाहते हैं तो आप CURRENT_TIMESTAMP
अन्य उत्तरों (या SYSTIMESTAMP
) में दिखाए अनुसार उपयोग कर सकते हैं ।
यदि आपके पास एक स्ट्रिंग के रूप में समय है और इसे टाइमस्टैम्प में बदलना चाहते हैं, तो एक अभिव्यक्ति का उपयोग करें
to_timestamp(:timestamp_as_string,'MM/DD/YYYY HH24:MI:SS.FF3')
समय प्रारूप घटक हैं, मुझे उम्मीद है, आत्म-व्याख्यात्मक, सिवाय इसके कि FF3
उप-सेकंड परिशुद्धता के 3 अंक। आप परिशुद्धता के 6 अंक तक जा सकते हैं।
यदि आप किसी एप्लिकेशन से इंसर्ट कर रहे हैं, तो सबसे अच्छा उत्तर इस बात पर निर्भर कर सकता है कि आपकी भाषा में दिनांक / समय मान कैसे संग्रहीत किया जाता है। उदाहरण के लिए, आप कुछ TIMESTAMP
कॉलम में सीधे जावा की कुछ वस्तुओं को मैप कर सकते हैं , लेकिन आपको JDBC
टाइपिंग मैपिंग को समझने की आवश्यकता है ।
मुझे एएनएसआई टाइमस्टैम्प शाब्दिक पसंद है:
insert into the_table
(the_timestamp_column)
values
(timestamp '2017-10-12 21:22:23');
मैनुअल में अधिक जानकारी: https://docs.oracle.com/database/121/SQLRF/sql_elements003.htm#SQLRF51062
timestamp '2019-05-16 10:05:51:19:277401'
मेरे पास इस त्रुटि का उपयोग करते हुए : ORA-01882: टाइमज़ोन क्षेत्र नहीं मिला
एसक्यूएल में डालने की तारीख
insert
into tablename (timestamp_value)
values ('dd-mm-yyyy hh-mm-ss AM');
अगर मान लें कि हम सिस्टम की तारीख डालना चाहते थे
insert
into tablename (timestamp_value)
values (sysdate);
सबसे पहले आपको क्षेत्र को अशक्त बनाने की आवश्यकता है, फिर उसके बाद इतना सरल - एक मूल्य डालने के बजाय इस कोड को डालें CURRENT_TIMESTAMP
।
मेरे अपने भविष्य के संदर्भ के लिए:
Cx_Oracle के साथ कर्सर का उपयोग करें ।setinputsize (...):
mycursor = connection.cursor();
mycursor.setinputsize( mytimestamp=cx_Oracle.TIMESTAMP );
params = { 'mytimestamp': timestampVar };
cusrsor.execute("INSERT INTO mytable (timestamp_field9 VALUES(:mytimestamp)", params);
डीबी में कोई परिवर्तित करना आवश्यक है। ओरेकल दस्तावेज़ देखें
एक बस उपयोग कर सकते हैं
INSERT INTO MY_TABLE(MY_TIMESTAMP_FIELD)
VALUES (TIMESTAMP '2019-02-15 13:22:11.871+02:00');
इस तरह आपको तारीख प्रारूप स्ट्रिंग के बारे में चिंता करने की ज़रूरत नहीं होगी, बस डिफ़ॉल्ट टाइमस्टैम्प प्रारूप का उपयोग करें।
Oracle 11 के साथ काम करता है, अगर यह पहले वाले Oracle संस्करणों के लिए करता है तो इसका कोई मतलब नहीं है।