यहाँ स्थिति है:

select sysdate from dual ;

>  30-APR-19

SELECT
  count(*)
FROM 
  event_log
WHERE
  edate between to_date('04232019', 'MMDDYYYY') and to_date('04292019', 'MMDDYYYY') ;

> 1156

SELECT
  count(*)
FROM 
  event_log
WHERE
  edate between (sysdate-7) and (sysdate-1) ;

> 1276

यह एक इवेंट लॉग है, पंक्तियों को दिनांक-टैग किया गया है (पिछले दिनों की पंक्ति गणना स्थिर है)।

मेरा प्रश्न - गिनती समान क्यों नहीं है? मुझे किसकी याद आ रही है? क्या दो श्रेणियों के बीच कुछ अर्थपूर्ण अंतर है?

0
theRiley 1 मई 2019, 00:05

1 उत्तर

सबसे बढ़िया उत्तर

SYSDATE एक ऐसा फ़ंक्शन है जो दिनांक और समय दोनों घटकों को लौटाता है। यदि आप TRUNCइसे नहीं खाते हैं, तो आपको दोनों मिलेंगे:

SQL> select sysdate,
  2         sysdate - 7 prev_week,
  3         sysdate - 1 yesterday
  4  from dual;

SYSDATE             PREV_WEEK           YESTERDAY
------------------- ------------------- -------------------
30.04.2019 23:13:14 23.04.2019 23:13:14 29.04.2019 23:13:14

SQL>

अगर आप TRUNCइसे खा लेते हैं, तो आपको आधी रात मिल जाएगी:

SQL> select trunc(sysdate) today,
  2         trunc(sysdate - 7) prev_week,
  3         trunc(sysdate - 1) yesterday
  4  from dual;

TODAY               PREV_WEEK           YESTERDAY
------------------- ------------------- -------------------
30.04.2019 00:00:00 23.04.2019 00:00:00 29.04.2019 00:00:00

SQL>

जिसका अर्थ है कि आपकी अंतिम स्थिति, शायद, होनी चाहिए

where edate between trunc(sysdate-7) and trunc(sysdate-1) ;
2
Littlefoot 30 अप्रैल 2019, 21:15