मेरे पास फ़ाइल में एक कॉलम है Delivery_date - '02/09/2020 15:30:00 PM' स्ट्रिंग फॉर्मेट में। यह AM या PM दोनों हो सकता है। मुझे इसे इंफॉर्मेटिका पावर सेंटर में ऑरैकल के TIMESTAMP फॉर्मेट में बदलने की जरूरत है।
मैंने नीचे की तरह कोशिश की है- TO_DATE(Delivery_date,'MM-DD-YYYY HH24:MI:SS')
लेकिन यह AM PM के लिए काम नहीं कर रहा है। कृपया सुझाव दें
3 जवाब
यदि आप एक TIMESTAMP
डेटा प्रकार चाहते हैं तो TO_TIMESTAMP
का उपयोग करें। Oracle दोनों HH24
और AM
(या PM
) प्रारूप मॉडल की अनुमति नहीं देता है क्योंकि यह अस्पष्ट होगा यदि 24 घंटे की घड़ी और मध्याह्न संकेतक मेल नहीं खाते हैं; आपको उनमें से एक को हटाना होगा और चूंकि AM
/PM
संकेतक स्ट्रिंग के अंत में है तो SUBSTR
का उपयोग करके इसे निकालना सबसे आसान है:
TO_TIMESTAMP( SUBSTR( delivery_date, 1, 19 ), 'MM/DD/YYYY HH24:MI:SS' )
(और यदि आप केवल एक DATE
डेटा प्रकार चाहते हैं, जिसमें Oracle में एक समय घटक भी है, तो TO_TIMESTAMP
के बजाय TO_DATE
का उपयोग करें)
TO_DATE(SUBSTR( '02/09/2020 15:30:00 PM', 1, 19 ))
आप अपने मानचित्रण परिवर्तन में reg_replace का उपयोग करके AM या PM को हटा सकते हैं, फिर TO_DATE जोड़ें यदि कॉलम दिनांक/समय प्रारूप में है
REG_REPLACE('02/09/2020 15:30:00 PM', '( AM| PM)', '')
चूंकि डेटा स्ट्रिंग के रूप में आ रहा है और समय के साथ बाहर जा रहा है, मेरा मानना है कि आपका आउटपुट एप्रेशन दिनांक/समय में होगा
फिर आप to_date
को काम में जोड़ सकते हैं।
TO_DATE(REG_REPLACE('02/09/2020 15:30:00 PM', '( AM| PM)', ''), 'MM-DD-YYYY HH24:MI:SS')
और यदि आप प्रारूप के लिए बाध्य करना चाहते हैं -- दूसरा तरीका
TO_DATE(TO_CHAR(TO_DATE(REG_REPLACE('02/09/2020 15:30:00 PM', '( AM| PM)', '')), 'MM-DD-YYYY HH24:MI:SS'))
#EXPLANATION
/*REMOVE THE AM/PM: REG_REPLACE('02/09/2020 15:30:00 PM', '( AM| PM)', '')*/
/*CONVERT IT TO DATE: TO_DATE(REG_REPLACE('02/09/2020 15:30:00 PM', '( AM| PM)', ''))*/
/*CHANGE THE FORMAT: TO_CHAR(TO_DATE(REG_REPLACE('02/09/2020 15:30:00 PM', '( AM| PM)', '')), 'MM-DD-YYYY HH24:MI:SS')*/
/*THEN RETURN TO DATE: TO_CHAR(TO_DATE(REG_REPLACE('02/09/2020 15:30:00 PM', '( AM| PM)', '')), 'MM-DD-YYYY HH24:MI:SS')*/
क्या आपने केवल पूर्ण प्रारूप को कवर करने का प्रयास किया है ?:
TO_DATE( Delivery_date, 'MM/DD/YYYY HH12:MI:SS AM' )
यह ठीक काम करना चाहिए। प्रारूप संबंधी अधिक प्रश्नों के लिए कृपया दस्तावेज़ीकरण।
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
sql
संरचित क्वेरी भाषा (एसक्यूएल) डेटाबेस को क्वेरी करने के लिए एक भाषा है। प्रश्नों में कोड उदाहरण, तालिका संरचना, नमूना डेटा और DBMS कार्यान्वयन के लिए एक टैग (जैसे MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, आदि) का उपयोग किया जाना चाहिए। यदि आपका प्रश्न केवल एक विशिष्ट DBMS (विशिष्ट एक्सटेंशन / सुविधाओं का उपयोग करता है) से संबंधित है, तो इसके बजाय उस DBMS के टैग का उपयोग करें। एसक्यूएल के साथ टैग किए गए सवालों के जवाब में आईएसओ / आईईसी मानक एसक्यूएल का उपयोग करना चाहिए।
MM-DD-YYYY HH24:MI:SS
में क्यों चाहते हैं न किYYYY-MM-DD HH24:MI:SS
में।SELECT TO_TIMESTAMP(sysdate) FROM dual;
रिटर्नYYYY-MM-DD HH24:MI:SS
फॉर्मेट कर रहा हैALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'DD-RR-MM AM SS:HH:MI'
) में जो भी प्रारूप चाहते हैं उसे सेट कर सकते हैं, इसलिए आपको कभी भी एक डिफ़ॉल्ट प्रारूप पर भरोसा नहीं करना चाहिए और हमेशा दूसरे तर्क में एक प्रारूप मॉडल की आपूर्ति करनी चाहिएTO_TIMESTAMP
तथाTO_DATE
. db<>fiddle: पहले उदाहरण में, समय गलत है और दूसरा उदाहरण शताब्दी और समय दोनों गलत हैं और तीसरा उदाहरण भी नहीं चलता है (सभी कभी भी SQL कथन को बदले बिना)।