Количество дней в месяце
У меня есть ежемесячная сумма, которую мне нужно равномерно распределить по количеству дней в месяце. Данные выглядят следующим образом:
Month Value
----------- ---------------
01-Jan-2012 100000
01-Feb-2012 121002
01-Mar-2012 123123
01-Apr-2012 118239
Я должен распространять января сумма за 31 день, сумма за 29 дней февраля и март сумма за 31 день.
Как я могу использовать PL / SQL, чтобы узнать, сколько дней есть в месяце, указанном в столбце месяца?
7 ответов
не используйте to_char()
и прочее при выполнении арифметики с датами.
Строки строки и даты-это даты. Пожалуйста, уважайте типы данных и используйте вместо этого:
1+trunc(last_day(date_column))-trunc(date_column,'MM')
действительно, это правильно. Он вычисляет разницу между стоимостью последнего дня месяца и стоимостью Первого (который, очевидно, всегда 1, и поэтому нам нужно добавить это 1 снова).
вы не должны забывать использовать trunc()
функция, если ваши столбцы даты содержат время, потому что last_day()
сохраняет компонент времени.
вы можете добавить месяц и вычесть две даты
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 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
/
используйте следующий запрос 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