Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

SQL दिनांक रूपांतरण परिणाम अमान्य संख्या प्रारूप मॉडल पैरामीटर में।

मूल कारण:

आप एक NUMBER . को रूपांतरित कर रहे हैं करने के लिए STRING , मान लें कि यह DATE है . 20111010 एक DATE नहीं है, यह एक NUMBER है। साथ ही, '20111010' DATE नहीं है, यह STRING है। वे पूरी तरह से अलग हैं।

  • 20111010 - NUMBER
  • '20111010' - STRING
  • TO_DATE('20111010','YYYYMMDD') - दिनांक

त्रुटि:

SQL> SELECT TO_CHAR(20111010, 'YYYY/MM/DD') FROM dual;
SELECT TO_CHAR(20111010, 'YYYY/MM/DD') FROM dual
                         *
ERROR at line 1:
ORA-01481: invalid number format model

आपकी क्वेरी पर आ रहा है:

WHERE TO_DATE(TO_CHAR(CREATE_TIME, 'YYYY/MM/DD'), 'YYYY/MM/DD')
  BETWEEN TO_DATE(TO_CHAR(:fromDate, 'YYYY/MM/DD'), 'YYYY/MM/DD') 
AND TO_DATE(TO_CHAR(:toDate, 'YYYY/MM/DD'), 'YYYY/MM/DD')

आप अनावश्यक रूप से रूपांतरण और स्वरूपण को जटिल बना रहे हैं।

टाइमस्टैम्प डेटाटाइप DATE . को एक एक्सटेंशन है डेटा प्रकार। DATE डेटाटाइप के डेटाटाइम तत्वों के अलावा, TIMESTAMP डेटाटाइप में 0 और 9 दशमलव स्थानों के बीच सटीकता के लिए एक सेकंड के अंश होते हैं, डिफ़ॉल्ट 6 होता है।

चूंकि आप TIMESTAMP . के साथ काम कर रहे हैं आप TO_TIMESTAMP का उपयोग कर सकते हैं .

DATE/TIMESTAMP अंकगणित करते समय , आपको डेटा प्रकार को वैसे ही छोड़ देना चाहिए और इसे स्ट्रिंग . में परिवर्तित नहीं करना चाहिए . आपको उपयोग करने की आवश्यकता हैTO_CHAR केवल प्रदर्शन . के लिए ।

अपने फ़िल्टर विधेय को इस प्रकार संशोधित करें:

WHERE CREATE_TIME 
BETWEEN TO_TIMESTAMP(:fromDate, 'YYYY/MM/DD') 
AND TO_TIMESTAMP(:toDate, 'YYYY/MM/DD')

ऊपर, :fromDate और :toDate एक स्ट्रिंग . होना चाहिए और संख्या . नहीं ।

उदाहरण के लिए,

SQL> SELECT to_timestamp('20111010', 'YYYYMMDD') FROM dual;

TO_TIMESTAMP('20111010','YYYYMMDD')
-----------------------------------------------------------
10-OCT-11 12.00.00.000000000 AM

या, TO_CHAR का उपयोग करें पहले रूपांतरित करने के लिए संख्या स्ट्रिंग . में :

SQL> SELECT to_timestamp(TO_CHAR(20111010), 'YYYYMMDD') FROM dual;

TO_TIMESTAMP(TO_CHAR(20111010),'YYYYMMDD')
------------------------------------------------------------------
10-OCT-11 12.00.00.000000000 AM


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ऑरैकल में ट्रिगर को कैसे हटाएं जिसमें विशेष वर्ण हों?

  2. एसएसआईएस में ओरेकल से SQL2005 डेटाटाइम फ़ील्ड ओवरफ्लो हो जाता है

  3. pl\sql . के साथ लाइन से क्लॉब लाइन पढ़ना

  4. कोडनिर्देशक और ओरेकल अपरिभाषित स्थिरांक:OCI_COMMIT_ON_SUCCESS

  5. 'ORA-00942:तालिका या दृश्य मौजूद नहीं है' केवल एक संग्रहीत प्रक्रिया के भीतर चलने पर