我有一个月的金额,我需要在这个月的天数平均分配。数据如下所示:
Month Value
----------- ---------------
01-Jan-2012 100000
01-Feb-2012 121002
01-Mar-2012 123123
01-Apr-2012 118239
我必须将Jan金额超过31天,2月金额超过29天,3月金额超过31天。
如何使用PL / SQL查找月份列中给出的月份中的天数?
答案 0 :(得分:17)
SELECT CAST(to_char(LAST_DAY(date_column),'dd') AS INT)
FROM table1
答案 1 :(得分: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
答案 2 :(得分:5)
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
/
答案 3 :(得分:5)
在使用日期进行算术时,不要使用to_char()
和东西。
字符串是字符串,日期是日期。请尊重数据类型并改为使用:
1+trunc(last_day(date_column))-trunc(date_column,'MM')
确实,这是正确的。它计算了当月最后一天的值与第一天的值之间的差异(显然总是1,因此我们需要再次添加1)
如果您的日期列包含时间,则不要忘记使用trunc()
函数,因为last_day()
会保留时间组件。
答案 4 :(得分:0)
select add_months(my_date, 1)-my_date from dual;
答案 5 :(得分:0)
SELECT TO_CHAR(LAST_DAY(SYSDATE), 'fmday-mon-rr dd') as LastDayOfMonth
FROM dual;
答案 6 :(得分:0)
使用以下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