毎月の日数に均等に配分する必要がある月額があります。データは次のようになります。
Month Value
----------- ---------------
01-Jan-2012 100000
01-Feb-2012 121002
01-Mar-2012 123123
01-Apr-2012 118239
1月の金額を31日間、2月の金額を29日間、3月の金額を31日間に広げなければなりません。
PL/SQLを使用して、月の列に示されている月の日数を調べるにはどうすればよいですか?
日付を使用して算術演算を行う場合は、to_char()
などを使用しないでください。文字列は文字列であり、日付は日付です。データ型を尊重し、代わりにこれを使用してください:
1+trunc(last_day(date_column))-trunc(date_column,'MM')
確かに、これは正しいです。これは、月の最終日のvalueと最初のvalueの差を計算します(これは明らかに常に1なので、この1を再度追加する必要があります)。 。
trunc()
は時間コンポーネントを保持するため、日付列に時間が含まれている場合は、last_day()
関数を使用することを忘れないでください。
SELECT CAST(to_char(LAST_DAY(date_column),'dd') AS INT)
FROM table1
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
/
月を追加して、2つの日付を減算できます
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
select add_months(my_date, 1)-my_date from dual;
次のOracleクエリを使用します。
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
SELECT TO_CHAR(LAST_DAY(SYSDATE), 'fmday-mon-rr dd') as LastDayOfMonth
FROM dual;