如何在Oracle中打印一年中的最后一个星期日

时间:2017-02-02 05:22:27

标签: sql oracle

我需要打印一年中的最后一个星期日,从中添加7个星期日将给我明年的所有星期日。

我有代码打印特定年份的所有星期日,如果我有一个开始日期但我需要用户把年份放在上一年的上一个星期日将生成,并且将添加7以获得第一个星期日那年的等等,直到明年的最后一个星期天

例如输入年是2017年,它将检查2016年的最后一个星期日,并添加7以获得2017年的第一个星期日,即1-1-2017,它将继续打印所有星期日,直到2017年12月31日< / p>

1 个答案:

答案 0 :(得分:3)

函数next_day()有两个参数:日期和星期几的名称。它返回与一周中给定日期匹配的最接近的“下一个”日(在日期参数之后)。所以结果是在一到七天之前。 (如果您想要'星期二'并且输入日期是星期二,则该函数会在七天后返回日期。)

如果你想要一年的最后一个星期天,那么它将在12月25日到12月31日之间。所以如果你用12月24日(!!)和'星期日'的参数调用next_day()函数你会得到你想要的东西。

结果将与date参数具有相同的时间,因此如果您给出的日期没有时间,那么输出也是如此(这可能是您想要的)。所以:

select next_day(date '2016-12-24', 'Sunday') from dual;

NEXT_DAY(D
----------
2016-12-25

已添加:如果您从用户那里获取输入,则可以执行以下操作:

select next_day(to_date(:input_year - 1 || '-12-24', 'yyyy-mm-dd'), 'Sunday') from dual;

如果你提供2017作为输入(你的界面对绑定变量有什么机制),输出将是2016-12-25(在DATE数据类型中,所以不要问“以什么格式” - 日期不是有格式!)