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

पिछले 5 वर्षों के 31 दिसंबर और आज की तारीख का डेटा प्राप्त करें

मान लें कि आपकी तिथियों में हमेशा मध्यरात्रि में समय घटक होता है:

SELECT *
FROM   your_table
WHERE  your_date_column IN (
         TRUNC( SYSDATE ),
         TRUNC( SYSDATE + INTERVAL '1' DAY, 'YYYY' ) - INTERVAL '1' DAY,
         ADD_MONTHS( TRUNC( SYSDATE + INTERVAL '1' DAY, 'YYYY' ) - INTERVAL '1' DAY, -12 ),
         ADD_MONTHS( TRUNC( SYSDATE + INTERVAL '1' DAY, 'YYYY' ) - INTERVAL '1' DAY, -24 ),
         ADD_MONTHS( TRUNC( SYSDATE + INTERVAL '1' DAY, 'YYYY' ) - INTERVAL '1' DAY, -36 ),
         ADD_MONTHS( TRUNC( SYSDATE + INTERVAL '1' DAY, 'YYYY' ) - INTERVAL '1' DAY, -48 )
       );

(आज 31 दिसंबर होने पर केस से मिलान करने के लिए आपको ट्रिमिंग से 1 दिन पहले जोड़ना होगा)

इसका आसान समाधान TRUNC . का उपयोग करना होगा तारीख पर।

SELECT *
FROM   your_table
WHERE  TRUNC( your_date_column ) IN (
         TRUNC( SYSDATE ),
         TRUNC( SYSDATE + INTERVAL '1' DAY, 'YYYY' ) - INTERVAL '1' DAY,
         ADD_MONTHS( TRUNC( SYSDATE + INTERVAL '1' DAY, 'YYYY' ) - INTERVAL '1' DAY, -12 ),
         ADD_MONTHS( TRUNC( SYSDATE + INTERVAL '1' DAY, 'YYYY' ) - INTERVAL '1' DAY, -24 ),
         ADD_MONTHS( TRUNC( SYSDATE + INTERVAL '1' DAY, 'YYYY' ) - INTERVAL '1' DAY, -36 ),
         ADD_MONTHS( TRUNC( SYSDATE + INTERVAL '1' DAY, 'YYYY' ) - INTERVAL '1' DAY, -48 )
       );

लेकिन तब आप कॉलम पर एक इंडेक्स का उपयोग नहीं कर सकते हैं और आपको TRUNC( your_date_column ) पर फ़ंक्शन-आधारित इंडेक्स की आवश्यकता होगी। अनुक्रमणिका का उपयोग करने में सक्षम होने के लिए।

अधिक जटिल समाधान, जो अनुक्रमणिका का उपयोग कर सकता है, वह है:

SELECT *
FROM   your_table
WHERE  ( your_date_column >= TRUNC( sysdate )
     AND your_date_column  < TRUNC( sysdate ) + INTERVAL '1' DAY
       )
OR     ( your_date_column >= TRUNC( SYSDATE + INTERVAL '1' DAY, 'YYYY' ) - INTERVAL '1' DAY
     AND your_date_column  < TRUNC( SYSDATE + INTERVAL '1' DAY, 'YYYY' )
       )
OR     ( your_date_column >= ADD_MONTHS( TRUNC( SYSDATE + INTERVAL '1' DAY, 'YYYY' ) - INTERVAL '1' DAY, -12 )
     AND your_date_column  < ADD_MONTHS( TRUNC( SYSDATE + INTERVAL '1' DAY, 'YYYY' ), -12 )
       )
OR     ( your_date_column >= ADD_MONTHS( TRUNC( SYSDATE + INTERVAL '1' DAY, 'YYYY' ) - INTERVAL '1' DAY, -12 )
     AND your_date_column  < ADD_MONTHS( TRUNC( SYSDATE + INTERVAL '1' DAY, 'YYYY' ), -24 )
       )
OR     ( your_date_column >= ADD_MONTHS( TRUNC( SYSDATE + INTERVAL '1' DAY, 'YYYY' ) - INTERVAL '1' DAY, -12 )
     AND your_date_column  < ADD_MONTHS( TRUNC( SYSDATE + INTERVAL '1' DAY, 'YYYY' ), -36 )
       )
OR     ( your_date_column >= ADD_MONTHS( TRUNC( SYSDATE + INTERVAL '1' DAY, 'YYYY' ) - INTERVAL '1' DAY, -12 )
     AND your_date_column  < ADD_MONTHS( TRUNC( SYSDATE + INTERVAL '1' DAY, 'YYYY' ), -48 )
       );


  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. ओरेकल संग्रहीत प्रक्रिया को कैसे कॉल करें जिसमें जावा में उपयोगकर्ता द्वारा परिभाषित प्रकार शामिल है?

  3. Oracle:LIKE जहाँ एक स्ट्रिंग का कोई भाग दूसरे स्ट्रिंग के किसी भाग से मेल खाता है

  4. एंटिटी फ्रेमवर्क का उपयोग करके ओरेकल के लिए बूलियन संपत्ति का मानचित्रण

  5. क्या पीएल/एसक्यूएल प्रक्रियाओं में नेस्टेड ब्लॉक का कोई प्रदर्शन प्रभाव पड़ता है?