一个月的天数

Raj*_*ore 9 sql oracle plsql date-arithmetic

我有一个月的金额,我需要在这个月的天数平均分配.数据如下所示:

Month       Value
----------- ---------------
01-Jan-2012 100000
01-Feb-2012 121002
01-Mar-2012 123123
01-Apr-2012 118239
Run Code Online (Sandbox Code Playgroud)

我必须将Jan金额超过31天,2月金额超过29天,3月金额超过31天.

如何使用PL/SQL查找月份列中给出的月份中的天数?

a1e*_*x07 17

SELECT CAST(to_char(LAST_DAY(date_column),'dd') AS INT)
  FROM table1
Run Code Online (Sandbox Code Playgroud)


Art*_*Art 6

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
/
Run Code Online (Sandbox Code Playgroud)


Uni*_*rsE 6

to_char()做日期算术时不要使用和填充.字符串是字符串,日期是日期.请尊重数据类型并使用它:

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

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

trunc()如果日期列包含时间,则不能忘记使用该函数,因为last_day()保留了时间组件.


Jus*_*ave 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
Run Code Online (Sandbox Code Playgroud)