it-swarm.com.de

Anzahl der Tage eines Monats

Ich habe einen monatlichen Betrag, den ich gleichmäßig auf die Anzahl der Tage im Monat verteilen muss. Die Daten sehen so aus:

Month       Value
----------- ---------------
01-Jan-2012 100000
01-Feb-2012 121002
01-Mar-2012 123123
01-Apr-2012 118239

Ich muss den Jan-Betrag über 31 Tage, den Feb-Betrag über 29 Tage und den März-Betrag über 31 Tage verteilen.

Wie kann ich PL/SQL verwenden, um herauszufinden, wie viele Tage in dem in der Monatsspalte angegebenen Monat vorhanden sind?

9
Raj More

Verwenden Sie nicht to_char() und Sachen, wenn Sie mit Datumsangaben rechnen. Zeichenfolgen sind Zeichenfolgen und Datumsangaben sind Datumsangaben. Bitte respektieren Sie die Datentypen und verwenden Sie stattdessen Folgendes:

1+trunc(last_day(date_column))-trunc(date_column,'MM')

In der Tat ist das richtig. Sie berechnet die Differenz zwischen dem Wert des letzten Tages des Monats und dem Wert des ersten (was offensichtlich immer 1 ist und daher müssen wir diese 1 erneut hinzufügen).

Sie dürfen nicht vergessen, die Funktion trunc() zu verwenden, wenn Ihre Datumsspalten Zeit enthalten, da last_day() die Zeitkomponente beibehält.

5
UniversE
SELECT CAST(to_char(LAST_DAY(date_column),'dd') AS INT)
  FROM table1
17
a1ex07
SELECT EXTRACT(DAY FROM LAST_DAY(SYSDATE)) num_of_days FROM dual;
/
SELECT SYSDATE, TO_CHAR(LAST_DAY(SYSDATE), 'DD') num_of_days FROM dual
/
-- Days left in a month --
SELECT SYSDATE, LAST_DAY(SYSDATE) "Last", LAST_DAY(SYSDATE) - SYSDATE "Days left"
FROM DUAL
/
5
Art

Sie können einen Monat hinzufügen und die beiden Daten abziehen

SQL> ed
Wrote file afiedt.buf

  1  with x as (
  2      select date '2012-01-01' dt from dual union all
  3      select date '2012-02-01' from dual union all
  4      select date '2012-03-01' from dual union all
  5      select date '2012-01-31' from dual
  6    )
  7    select dt, add_months(trunc(dt,'MM'),1) - trunc(dt,'MM')
  8*     from x
SQL> /

DT        ADD_MONTHS(TRUNC(DT,'MM'),1)-TRUNC(DT,'MM')
--------- -------------------------------------------
01-JAN-12                                          31
01-FEB-12                                          29
01-MAR-12                                          31
31-JAN-12                                          31
5
Justin Cave
select add_months(my_date, 1)-my_date from dual;
0
koljaTM

Verwenden Sie die folgende Oracle-Abfrage:

select to_number(to_char(last_day(sysdate),'dd')) TotalDays from dual

Date_Parameter='01-Oct-2017'
select to_number(to_char(last_day('Date_Parameter'),'dd')) TotalDays from dual
0
SAH
SELECT TO_CHAR(LAST_DAY(SYSDATE), 'fmday-mon-rr dd') as LastDayOfMonth
FROM dual;
0
Pranav Shah