كيف يمكنني استخراج النطاق الزمني وعرضه بناءً على الربع في Oracle؟

StackOverflow https://stackoverflow.com//questions/9685244

سؤال

أقوم بإنشاء جدول ملخص كجزء من إجراء مخزن ولدي عمودين.يحتاج العمود الأول إلى إظهار البداية، بينما يحتاج العمود الثاني إلى إظهار نهاية نطاق التاريخ الذي يستند إلى معلمة إدخال تمثل رقمًا يحدد ربع السنة.لقد تمكنت من استخراج ما يلي من AskTom ولكن لدي بعض الأسئلة.

Open C1 FOR
SELECT  ( SELECT TRUNC (SYSDATE, 'Q')-1+1 AS 'StartOf' FROM DUAL ),
SELECT  ( SELECT TRUNC(ADD_MONTHS (SYSDATE, +3), 'Q')-2 AS 'EndOf' FROM DUAL )
FROM DUAL; 

السؤال رقم 1.هل ستحسب الرياضيات هنا LeapYears...لا أعتقد أن ذلك سيحدث ولكني لست متأكدًا من كيفية التعامل مع ذلك.

السؤال 2.كيف يمكنني إضافة معلمة الإدخال "inQuarter" كربع محدد؟لقد حاولت وضعه بدلاً من sysdate ولكني بحاجة إلى إعادة تنسيقه إلى التاريخ أولاً على ما أعتقد؟

ويرجع الفضل في ذلك مسبقا لأية ردود.

هل كانت مفيدة؟

نصائح أخرى

يمكنك تحويل سنة رقمية ومعلمة ربع رقمية إلى a DATE

SELECT add_months( trunc( to_date( to_char( <<numeric year>> ),
                                   'YYYY' ),
                          'YYYY' ),
                   3 * <<numeric quarter>> ) first_of_quarter,
       add_months( trunc( to_date( to_char( <<numeric year>> ),
                                   'YYYY' ),
                          'YYYY' ),
                   4 * <<numeric quarter>> ) - 1 last_of_quarter,
  FROM dual

سيكون المكون الزمني لكلا التاريخين هو منتصف الليل في اليوم الأخير من الربع (أي 12:00).قبل 24 ساعة من بداية الربع القادم).قد ترغب في أن يكون آخر ربع سنة هو 23:59:59 في اليوم الأخير من ربع السنة إذا كنت تريد أن يشمل النطاق جميع التواريخ المحتملة في ربع السنة.

أقترح:

Open C1 FOR
SELECT TRUNC (d_inQuarter, 'Q') AS "StartOf",
       TRUNC(ADD_MONTHS (d_inQuarter, +3), 'Q') AS "EndOf"
FROM (SELECT add_months(to_date(to_char(i_yr)||'-01-01','YYYY-MM-DD'), (i_q-1)*3)
      AS d_inQuarter FROM DUAL); 

- مع وجود عدد صحيح من المعلمات i_yr وi_q يمثلان السنة والربع على التوالي.

لاحظ أن EndOf سيمثل منتصف الليل في اليوم الأول من الربع التالي، لذلك يجب أن يعتمد أي اختيار على الشروط < "EndOf", ، لا <= "EndOf".(يجب أن يضمن هذا إدراج جميع الأوقات في اليوم الأخير من ربع السنة).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top