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

मेरा TO_DATE ठीक से काम नहीं कर रहा है

सबसे अधिक संभावना यह है कि एक भिन्नात्मक दिनांक घटक है जिस पर आप ध्यान नहीं दे रहे हैं। आप अपनी क्वेरी में कॉलम को छोटा करके उस भिन्नात्मक दिनांक घटक को अनदेखा कर सकते हैं:

SELECT section_id, COUNT(student_id) "ENROLLED"
FROM enrollment
WHERE TRUNC(enroll_date) = TO_DATE('2/10/2007', 'MM/DD/YYYY')
GROUP BY section_id
ORDER BY ENROLLED;

मैं मान रहा हूँ कि कॉलम enroll_date डेटा प्रकार DATE का है।

कुछ स्पष्टीकरण:Oracle दिनांकों को यहां के रूप में संग्रहीत करता है। , यह एक तारीख को संग्रहीत नहीं करता है जैसा कि आप कहते हैं "दिनांक प्रारूप पहले से ही DD-MON-YY है।"। यह केवल वह प्रारूप है जिसमें आप दिनांक देखते हैं, जो आपके सत्र के लिए पैरामीटर NLS_DATE_FORMAT द्वारा निर्धारित किया जाता है।

आइए एक परीक्षण तालिका के साथ एक त्वरित परीक्षण करें। टेबल बनाएं और NLS_DATE_FORMAT फॉर्म माय सेशन चेक करें।

create table DATE_TST 
( id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY,
  test_date DATE
);

INSERT INTO date_tst (test_date) VALUES (SYSDATE);

SELECT value
FROM   nls_session_parameters
WHERE  parameter = 'NLS_DATE_FORMAT';

DD-MON-YYYY

मैं अपनी तिथियां इस प्रकार देखूंगा।


SELECT * FROM date_tst;

04-OCT-2020

तो मेरे पास आज की तारीख है। ठंडा। अब देखते हैं कि क्या मैं उस तिथि का उपयोग करके क्वेरी कर सकता हूं:


SELECT * FROM date_tst WHERE test_date = TO_DATE('04-OCT-2020','DD-MON-YYYY');

no rows.

कोई पंक्तियाँ नहीं दिखाई जाती हैं क्योंकि जिस दिनांक प्रारूप में मुझे अपनी तिथि मिलती है उसमें समय घटक नहीं होता है। DATE में वर्ष, महीना, दिन, घंटा, मिनट और सेकंड होते हैं। प्रारूप में केवल वर्ष, महीना और दिन होता है। यह जांचने के लिए डेटा को क्वेरी करें कि क्या कोई समय घटक है।

SELECT TO_CHAR(test_date,'DD-MON-YYYY HH24:MI:SS') FROM date_tst;

4-OCT-2020 21:12:39

आह यह है... SYSDATE वर्तमान समय से दूसरे तक है। अब उस क्वेरी को अधिक सटीक दिनांक स्वरूप के साथ फिर से आज़माएँ:

SELECT * FROM date_tst WHERE test_date = TO_DATE('04-OCT-2020 21:12:39','DD-MON-YYYY HH24:MI:SS');

04-OCT-2020

और हमारी पंक्ति है। TRUNC कमांड समय घटक को काट देगा:

SELECT TO_CHAR(TRUNC(test_date),'DD-MON-YYYY HH24:MI:SS') FROM date_tst;

04-OCT-2020 00:00:00

तो आप अपनी क्वेरी को आसान बना सकते हैं:

SELECT * FROM date_tst WHERE TRUNC(test_date) = TO_DATE('04-OCT-2020','DD-MON-YYYY');

04-OCT-2020


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle से SQL सर्वर में डेटा माइग्रेशन

  2. ORA-28040:कोई मिलान प्रमाणीकरण प्रोटोकॉल नहीं

  3. ऑरैकल में किसी तालिका से डुप्लिकेट रिकॉर्ड कैसे हटाएं?

  4. तालिका (ओरेकल एसक्यूएल) में स्ट्रिंग (एक कॉलम) के रूप में एकाधिक पंक्तियों को वापस करने वाली सबक्वायरी का चयन करें

  5. संग्रह विधि:Oracle डेटाबेस में COUNT फ़ंक्शन