尝试这样的方法来生成月份范围的最后一天:
SELECT LAST_DAY(add_months(to_date('01/01/2016','DD/MM/YYYY'), level) )
from dual
CONNECT BY LEVEL <= 10
将您需要的 10 个月更改为 # 个月。这假定“TheDate”是正确的 oracle DATE 类型。如果需要格式化为字符串,请使用 to_char 包装。
@JeremyThompsons Months_Between 建议:
SELECT LAST_DAY(add_months(to_date('01-01-1991','DD/MM/YYYY'), level) )
from dual
CONNECT BY LEVEL <=
(SELECT MONTHS_BETWEEN
(TO_DATE('02-02-1999','MM-DD-YYYY'),
TO_DATE('01-01-1991','MM-DD-YYYY') ) "Months"
FROM dual);
带有@mathguys 函数顺序建议的最终查询:
SELECT * FROM Balances b
WHERE TheDate IN
(SELECT add_months(LAST_DAY(to_date('28/Feb/2015','DD-MM-YYYY')), level)
from dual
CONNECT BY LEVEL <=
(SELECT MONTHS_BETWEEN
(TO_DATE('30/Nov/2016','DD-MM-YYYY'),
TO_DATE('28/Feb/2015','DD-MM-YYYY') ) "Months"
FROM dual));
还有一个@mathguys 优化,不需要标量子查询:
SELECT * FROM Balances b
WHERE TheDate IN
(SELECT add_months(LAST_DAY(to_date('28/Feb/2015','DD-MM-YYYY')),level)
from dual
CONNECT BY LEVEL <= MONTHS_BETWEEN
(TO_DATE('30/Nov/2016','DD-MM-YYYY'),
TO_DATE('28/Feb/2015','DD-MM-YYYY')) );