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

Oracle sql में तारीख के साथ तुलना करना

समस्या दुगनी है। सबसे पहले तिथियों में लगभग निश्चित रूप से समय-घटक होते हैं। to_date('06-MAR-11','DD-MON-YY') 2011/03/06 00:00:00 . के बराबर है . यदि आप TRUNC() . का उपयोग करते हैं समारोह आप उस दिन के लिए सब कुछ देख पाएंगे:

select * 
  from test_table
 where trunc(creation_date) = to_date('06-MAR-11','DD-MON-YY');

मैं नहीं होता सोम डेटाटाइम प्रारूप मॉडल का उपयोग करें। जैसा कि मैं यहां समझाता हूं यह आपके क्षेत्र और सेटिंग्स पर निर्भर करता है। इसके बजाय संख्यात्मक माह प्रारूप मॉडल का उपयोग करना सुरक्षित है। समान रूप से, हमेशा शतक को वर्ष के हिस्से के रूप में निर्दिष्ट करें।

where trunc(creation_date) = to_date('06-03-YY11','DD-MM-YYYY');

आपकी दूसरी समस्या लगभग निश्चित रूप से आपकी NLS_DATE_FORMAT है; ऐसा लगता है कि यह समय को ध्यान में नहीं रखता है, इसलिए आपको 4 समान तिथियां क्यों दिखाई देती हैं। यह केवल उस तरीके को नियंत्रित करता है जिसमें डेटा दिखाया जाता है यह नहीं है कि इसे कैसे संग्रहीत किया जाता है।

आप इसे कुछ इस तरह से बदल सकते हैं:

ALTER SESSION SET NLS_DATE_FORMAT = "DD/MM/YYYY HH24:MI:SS"

अगर मैं निम्नलिखित का उपयोग करके एक परीक्षण वातावरण स्थापित करता हूं:

create table test_table ( creation_date date );
insert into test_table values ( sysdate );
insert into test_table values ( sysdate - 0.01 );
alter session set nls_date_format = "YYYY/MM/DD";

आप देख सकते हैं कि लौटाए गए डेटा में समय शामिल नहीं है (हालांकि SYSDATE करता है):

SQL> select * from test_table;

CREATION_D
----------
2013/04/12
2013/04/12

NLS_DATE_FORMAT को बदलने और उसी चयन को निष्पादित करने पर, अब आपको एक समय घटक मिलता है:

SQL> alter session set nls_date_format = "YYYY/MM/DD HH24:MI:SS";

Session altered.

SQL> select * from test_table;

CREATION_DATE
-------------------
2013/04/12 12:48:41
2013/04/12 12:34:17

अंत में, जब अकेले आज की तारीख का चयन करने का प्रयास किया जाएगा तो कोई पंक्तियाँ वापस नहीं की जाएंगी:

SQL> select *
  2    from test_table
  3   where creation_date = to_date('20130412','yyyymmdd');

no rows selected

लेकिन, TRUNC() using का उपयोग करते समय फ़ील्ड के केवल दिनांक भाग की तुलना करने के लिए आपको अपनी सभी पंक्तियाँ फिर से मिलेंगी:

SQL> select *
  2    from test_table
  3   where trunc(creation_date) = to_date('20130412','yyyymmdd');

CREATION_DATE
-------------------
2013/04/12 12:48:41
2013/04/12 12:34:17

वास्तव में अपने दूसरे प्रश्न का उत्तर देने के लिए, यदि आप अद्वितीय तिथियां चाहते हैं तो आप TRUNC() का पुन:उपयोग कर सकते हैं समारोह:

select distinct trunc(creation_date)
  from test_table


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या CASE स्टेटमेंट और DECODE समकक्ष हैं?

  2. Oracle में पैकेज के अंदर एक प्रक्रिया कैसे बनाएं

  3. current_timestamp SQL (Oracle) में 10 सेकंड कैसे जोड़ें

  4. केवल अंक रखने के लिए स्ट्रिंग की जाँच करें। (ओरेकल एसक्यूएल)

  5. Oracle में किसी तिथि से महीने का नाम कैसे प्राप्त करें?