【问题标题】:Get a list of month last days between 2 dates?获取两个日期之间的月份最后几天的列表?
【发布时间】:2021-08-28 01:58:55
【问题描述】:

正如标题所述,我正在尝试获取两个日期之间的最后几天的月份列表。

示例:

  • 日期 1 -> 2014-08-15
  • 日期 2 -> 2014-10-15

预期输出

2014-08-31
2014-09-30

我用来实现此目的的查询如下:

SELECT DISTINCT LAST_DAY(TO_DATE('2014-08-15') - 1 + ROWNUM)
FROM ALL_OBJECTS
WHERE TO_DATE('2014-08-15') - 1 + ROWNUM <= TO_DATE('2014-10-15');

但是我感觉可能有一种更优雅的方式来实现它。

任何意见将不胜感激!

【问题讨论】:

  • 但是 2014-10-31 比你上次的日期 2014-10-15 晚?
  • 确实不是。已修复并感谢您指出!

标签: sql oracle plsql date-range


【解决方案1】:

要获得与您相同的结果:

select add_months(LAST_DAY(date'2014-08-15'),level-1)
from dual 
connect by add_months(trunc(date'2014-08-15','mm'),level-1)<= date'2014-10-15';

但我认为 2014-10-31 不满足您的条件 - “两个日期之间”。

所以应该是这样的

select add_months(LAST_DAY(date'2014-08-15'),level-1)
from dual 
connect by add_months(LAST_DAY(date'2014-08-15'),level-1)<=date'2014-10-15';

select add_months(LAST_DAY(date'2014-08-15'),level-1)
from dual 
connect by level<=months_between(date'2014-10-15',date'2014-08-15');

最终查询:

select add_months(LAST_DAY(date'2014-11-07'),level-1)
from dual where add_months(LAST_DAY(date'2014-11-07'),level-1)<=date'2014-12-07'
connect by add_months(LAST_DAY(date'2014-11-07'),level-1)<=date'2014-12-07';

【讨论】:

  • 在一种情况下它不起作用,但是 - 如果范围是相同的日期,则 f.ex: '2014-11-07' to '2014-11-07' 输出是: '30.11.2014' 这是错误的......有什么想法吗?
  • 啊,我明白了。使用此查询:dbfiddle.uk/…
猜你喜欢
  • 2021-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
相关资源
最近更新 更多