मेरे पास फ़ाइल में एक कॉलम है Delivery_date - '02/09/2020 15:30:00 PM' स्ट्रिंग फॉर्मेट में। यह AM या PM दोनों हो सकता है। मुझे इसे इंफॉर्मेटिका पावर सेंटर में ऑरैकल के TIMESTAMP फॉर्मेट में बदलने की जरूरत है।

मैंने नीचे की तरह कोशिश की है- TO_DATE(Delivery_date,'MM-DD-YYYY HH24:MI:SS')

लेकिन यह AM PM के लिए काम नहीं कर रहा है। कृपया सुझाव दें

1
Yash 20 फरवरी 2020, 14:19
आप इसे MM-DD-YYYY HH24:MI:SS में क्यों चाहते हैं न कि YYYY-MM-DD HH24:MI:SS में। SELECT TO_TIMESTAMP(sysdate) FROM dual; रिटर्न YYYY-MM-DD HH24:MI:SS फॉर्मेट कर रहा है
 – 
Omari Victor Omosa
20 फरवरी 2020, 16:26
लेकिन यह किसी भी तरह से काम करेगा। जब तक आपने निर्दिष्ट किया है कि यह दिनांक है
 – 
Omari Victor Omosa
20 फरवरी 2020, 16:55
आपके उपयोगकर्ता अपने स्वयं के सत्र (यानी ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'DD-RR-MM AM SS:HH:MI') में जो भी प्रारूप चाहते हैं उसे सेट कर सकते हैं, इसलिए आपको कभी भी एक डिफ़ॉल्ट प्रारूप पर भरोसा नहीं करना चाहिए और हमेशा दूसरे तर्क में एक प्रारूप मॉडल की आपूर्ति करनी चाहिए TO_TIMESTAMP तथा TO_DATE. db<>fiddle: पहले उदाहरण में, समय गलत है और दूसरा उदाहरण शताब्दी और समय दोनों गलत हैं और तीसरा उदाहरण भी नहीं चलता है (सभी कभी भी SQL कथन को बदले बिना)।
 – 
MT0
20 फरवरी 2020, 17:10
आपको @ MT0 मिल गया। मैंने परीक्षण किया है कि यह काम करता है।
 – 
Omari Victor Omosa
20 फरवरी 2020, 17:12
मेरा कहना यह नहीं है कि यह आपके कंप्यूटर पर आपके डेटाबेस सेटिंग्स के साथ काम नहीं करता है; इसका कारण यह है कि यह सभी उपयोगकर्ताओं के लिए समान रूप से काम नहीं कर सकता है (देखें डिफ़ॉल्ट दिनांक स्वरूप a>) इसलिए यदि आपकी क्वेरी किसी भिन्न क्षेत्र में किसी व्यक्ति द्वारा चलाई जाती है तो वही SQL कथन अलग-अलग परिणाम देगा (या विराम) यदि आप एक डिफ़ॉल्ट प्रारूप मॉडल मानते हैं जो उपयोगकर्ता सत्रों के बीच संगत होने की गारंटी नहीं है। यदि आप चाहते हैं कि क्वेरी सभी के लिए समान रूप से काम करे तो एक स्पष्ट प्रारूप मॉडल पास करें।
 – 
MT0
20 फरवरी 2020, 17:17

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 का उपयोग करें)

0
MT0 20 फरवरी 2020, 14:54
TO_TIMESTAMP() इंफॉर्मेटिका टूल में काम नहीं करता है। जब तक TO_DATE(SUBSTR( '02/09/2020 15:30:00 PM', 1, 19 ))
 – 
Omari Victor Omosa
20 फरवरी 2020, 16:59

आप अपने मानचित्रण परिवर्तन में 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')

enter image description here

और यदि आप प्रारूप के लिए बाध्य करना चाहते हैं -- दूसरा तरीका

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')*/
0
Omari Victor Omosa 20 फरवरी 2020, 17:22

क्या आपने केवल पूर्ण प्रारूप को कवर करने का प्रयास किया है ?:

TO_DATE( Delivery_date, 'MM/DD/YYYY HH12:MI:SS AM' )

यह ठीक काम करना चाहिए। प्रारूप संबंधी अधिक प्रश्नों के लिए कृपया दस्तावेज़ीकरण

0
Maciejg 21 फरवरी 2020, 11:44