ओरेकल में टाइमस्टैम्प कैसे डालें?


91

मेरे पास इसमें एक timestampफ़ील्ड के साथ एक Oracle DB है। timestampइस क्षेत्र में सम्मिलित करने के लिए सही SQL कोड क्या है ?


9
"मुझे यह जानकारी कहीं नहीं मिल रही है।" ओरेकल डोक्यूमिनेशन व्यापक और ऑनलाइन है। इसे यहां देखें: download.oracle.com/docs/cd/B19306_01/server.102/b14200/toc.htm
APC

जवाबों:


135
insert
into tablename (timestamp_value)
values (TO_TIMESTAMP(:ts_val, 'YYYY-MM-DD HH24:MI:SS'));

यदि आप चाहते हैं कि वर्तमान समय का टिकट तब डाला जाए:

insert
into tablename (timestamp_value)
values (CURRENT_TIMESTAMP);

1
TO_DATEइसके बजाय क्यों TO_TIMESTAMP?
डेव कोस्टा

यह इस सरल INSERTकथन के लिए कोई मायने नहीं रखता है , लेकिन सामान्य तौर पर आप इस तरह के बाँध चर का उपयोग नहीं करना चाहते हैं। आपके पहले कथन में टाइप रूपांतरण इसे संवेदनशील होने से रोकता है, जो अच्छे प्लान बनाने के लिए ओरेकल की क्षमता को सीमित करता है। यदि आप values (:ts_val)इसके बजाय उपयोग करते हैं, तो अनुकूलक बेहतर कार्य कर सकता है : ts_val नक्शे सीधे टाइमस्टैम्प पर।
जॉन हेलर

@JonHeller क्या आप इस बात का एक विशिष्ट उदाहरण दिखा सकते हैं कि to_timestampयोजना-सक्षम SQL स्टेटमेंट के लिए खराब निष्पादन योजना का उपयोग करना कैसे होगा? मैं एक उदाहरण दिखा सकता हूं कि यह कैसे नहीं होगा। इसके बजाय, जो मुझे लगता है कि हम सभी से बचना चाहते हैं अप्रत्याशित डेटा प्रकार जबरदस्ती है जो एक अपेक्षित पंक्ति स्रोत ऑपरेशन (यानी, इष्टतम एक) का उपयोग करने से रोकता है।
जेफ होल्ट

@ jeff6times7 इस Gist को इस बात के स्पष्टीकरण के लिए देखें कि कैसे अनकवर्ड बाइंड वेरिएबल्स कन्वर्टेड बाइंड वैरिएबल को बेहतर बना सकते हैं। अंतर शायद केवल तभी मायने रखता है जब डेटा तिरछा हो। देशी बाइंड प्रकारों के साथ, ओरेकल डेटा को बेहतर ढंग से समझ सकता है और मूल्यों के आधार पर बेहतर अनुमान लगा सकता है।
जॉन हेलर

24
INSERT
INTO    mytable (timestamp_field)
VALUES  (CURRENT_TIMESTAMP)

CURRENT_TIMESTAMPऔर SYSTIMESTAMPइस उद्देश्य के लिए ओरेकल आरक्षित शब्द हैं। वे टाइमस्टैम्प के अनुरूप हैं SYSDATE


19
INSERT INTO TABLE_NAME (TIMESTAMP_VALUE) VALUES (TO_TIMESTAMP('2014-07-02 06:14:00.742000000', 'YYYY-MM-DD HH24:MI:SS.FF'));

9

काइंड इस बात पर निर्भर करता है कि आप जो मूल्य डालना चाहते हैं वह कहां से आ रहा है। यदि आप वर्तमान समय सम्मिलित करना चाहते हैं तो आप CURRENT_TIMESTAMPअन्य उत्तरों (या SYSTIMESTAMP) में दिखाए अनुसार उपयोग कर सकते हैं ।

यदि आपके पास एक स्ट्रिंग के रूप में समय है और इसे टाइमस्टैम्प में बदलना चाहते हैं, तो एक अभिव्यक्ति का उपयोग करें

to_timestamp(:timestamp_as_string,'MM/DD/YYYY HH24:MI:SS.FF3')

समय प्रारूप घटक हैं, मुझे उम्मीद है, आत्म-व्याख्यात्मक, सिवाय इसके कि FF3उप-सेकंड परिशुद्धता के 3 अंक। आप परिशुद्धता के 6 अंक तक जा सकते हैं।

यदि आप किसी एप्लिकेशन से इंसर्ट कर रहे हैं, तो सबसे अच्छा उत्तर इस बात पर निर्भर कर सकता है कि आपकी भाषा में दिनांक / समय मान कैसे संग्रहीत किया जाता है। उदाहरण के लिए, आप कुछ TIMESTAMPकॉलम में सीधे जावा की कुछ वस्तुओं को मैप कर सकते हैं , लेकिन आपको JDBCटाइपिंग मैपिंग को समझने की आवश्यकता है ।


4

मुझे एएनएसआई टाइमस्टैम्प शाब्दिक पसंद है:

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


Oracle 11. फील्ड को TIMESTAMP (6) के रूप में परिभाषित किया गया है न कि NULL। timestamp '2019-05-16 10:05:51:19:277401'मेरे पास इस त्रुटि का उपयोग करते हुए : ORA-01882: टाइमज़ोन क्षेत्र नहीं मिला
एलेक्स 75

1

एसक्यूएल में डालने की तारीख

insert
into tablename (timestamp_value)
values ('dd-mm-yyyy hh-mm-ss AM');

अगर मान लें कि हम सिस्टम की तारीख डालना चाहते थे

insert
into tablename (timestamp_value)
values (sysdate);

0

सबसे पहले आपको क्षेत्र को अशक्त बनाने की आवश्यकता है, फिर उसके बाद इतना सरल - एक मूल्य डालने के बजाय इस कोड को डालें CURRENT_TIMESTAMP


0

मेरे अपने भविष्य के संदर्भ के लिए:

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);

डीबी में कोई परिवर्तित करना आवश्यक है। ओरेकल दस्तावेज़ देखें


0

एक बस उपयोग कर सकते हैं

INSERT INTO MY_TABLE(MY_TIMESTAMP_FIELD)
VALUES (TIMESTAMP '2019-02-15 13:22:11.871+02:00');

इस तरह आपको तारीख प्रारूप स्ट्रिंग के बारे में चिंता करने की ज़रूरत नहीं होगी, बस डिफ़ॉल्ट टाइमस्टैम्प प्रारूप का उपयोग करें।

Oracle 11 के साथ काम करता है, अगर यह पहले वाले Oracle संस्करणों के लिए करता है तो इसका कोई मतलब नहीं है।


-6
CREATE TABLE Table1 (
id int identity(1, 1) NOT NULL,
Somecolmn varchar (5),
LastChanged [timestamp] NOT NULL)

यह mssql 2012 के लिए काम करता है

INSERT INTO Table1 VALUES('hello',DEFAULT)  
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.