10

我有一个每月的金额,我需要平均分配给该月的天数。数据如下所示:

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 找出月份列中给出的月份有多少天?

4

7 回答 7

19
SELECT CAST(to_char(LAST_DAY(date_column),'dd') AS INT)
  FROM table1
于 2012-12-07T16:08:14.593 回答
9

使用日期进行算术运算时不要使用to_char()and stuff。字符串是字符串,日期是日期。请尊重数据类型并改用它:

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

的确,这是正确的。它计算当月最后一天的值与第一天的之间的差值(显然总是 1,因此我们需要再次添加这个 1)。

You must not forget to use the trunc() function if your date columns contains time, because last_day() preserves the time component.

于 2016-10-27T11:34:19.117 回答
8
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
/
于 2012-12-07T22:39:28.757 回答
5

您可以添加一个月并减去两个日期

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
于 2012-12-07T16:03:26.307 回答
1
select add_months(my_date, 1)-my_date from dual;
于 2012-12-07T16:08:29.693 回答
0
SELECT TO_CHAR(LAST_DAY(SYSDATE), 'fmday-mon-rr dd') as LastDayOfMonth
FROM dual;
于 2015-04-09T09:59:51.337 回答
0

Use the following Oracle query:

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
于 2017-10-11T11:54:40.497 回答