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

ओरेकल एसक्यूएल में सप्ताहांत और छुट्टियों को छोड़कर दिनांक अंतर के लिए कस्टम फ़ंक्शन बनाएं

सप्ताह के दिनों की संख्या प्राप्त करने के लिए आपको हर दिन की गणना करने के लिए एक पंक्ति जनरेटर का उपयोग करने की आवश्यकता नहीं है - यह एक साधारण गणना का उपयोग करके किया जा सकता है:

मेरे उत्तर से यहाँ:

CREATE FUNCTION getWorkingDays (
  in_start_date IN  DATE,
  in_end_date   IN  DATE
) RETURN NUMBER DETERMINISTIC
IS
  p_start_date   DATE;
  p_end_date     DATE;
  p_working_days NUMBER;
  p_holiday_days NUMBER;
BEGIN
  IF in_start_date IS NULL OR in_end_date IS NULL THEN
    RETURN NUll;
  END IF;

  p_start_date := LEAST( in_start_date, in_end_date );
  p_end_date   := GREATEST( in_start_date, in_end_date );

  -- 5/7 * ( Number of days between monday of the week containing the start date
  --         and monday of the week containing the end date )
  -- + LEAST( day of week for end date, 5 )
  -- - LEAST( day of week for start date, 5 )
  p_working_days := ( TRUNC( p_end_date, 'IW' ) - TRUNC( p_start_date, 'IW' ) ) * 5 / 7
                    + LEAST( p_end_date - TRUNC( p_end_date, 'IW' ), 5 )
                    - LEAST( p_start_date - TRUNC( p_start_date, 'IW' ), 5 );

  SELECT COALESCE(
           SUM(
             LEAST( p_end_date, holiday_date + INTERVAL '1' DAY )
             - GREATEST( p_start_date, holiday_date )
           ),
           0
         )
  INTO   p_holiday_days
  FROM   Holidays
  WHERE  HOLIDAY_DATE BETWEEN TRUNC( p_start_date )
                      AND     TRUNC( p_end_date )
  AND    HOLIDAY_DATE - TRUNC( HOLIDAY_DATE, 'IW' ) < 5;

  RETURN GREATEST( p_working_days - p_holiday_days, 0 );
END;
/



  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 डेटाबेस में मौजूद कार्य

  4. Oracle में एक स्ट्रिंग और एक संख्या को जोड़ने के 2 तरीके

  5. मानों के एक ही ब्लॉक से संबंधित मानों को अलग किए बिना कई अद्वितीय मान प्राप्त करें