已关闭,此问题需要更focused。目前不接受答复。
**想改善这个问题吗?**更新问题,使其仅通过editing this post关注一个问题。
9天前关闭
Improve this question
我有一个以Hire_date作为DATE字段的EMPLOYEES表。
如何在Oracle SQL中从每个员工的雇用日期起5年后获得8月31日?
已关闭,此问题需要更focused。目前不接受答复。
**想改善这个问题吗?**更新问题,使其仅通过editing this post关注一个问题。
9天前关闭
Improve this question
我有一个以Hire_date作为DATE字段的EMPLOYEES表。
如何在Oracle SQL中从每个员工的雇用日期起5年后获得8月31日?
3条答案
按热度按时间bgibtngc1#
如果日期+ 5年小于该年的8月31日,则取该年的8月31日,否则从下一年开始:
dbfiddle demo
3htmauhk2#
与Ponder的查询类似,但有些不同:将
hiredate
截断为该年1月1日,然后再减去一天。
解释看起来比查询本身更复杂。
bprjcwpo3#
你可以在不使用
CASE
表达式的情况下完成它:1.减去8个月(将前一年的8月31日改为12月31日);
TRUNC
将日期更改为年初(这会将所有日期更改为1月1日);1.重新添加之前减去的8个月(这将更改所有日期为前一年的9月1日);
1.加上1年减去一天(这将把所有日期设置为当年的8月31日);和/或
1.加5年。
像这样:
其中,对于样本数据:
输出:
| 名称|招聘日期|雇用_DATE_PLUS_5_年|
| - -----|- -----|- -----|
| 爱丽丝|2020-08-31 00:00:00| 2025-08-31 00:00:00|
| 贝蒂|2020-09-01 00:00:00| 2026-08-31 00:00:00|
| 卡罗尔|2020-01-01 00:00:00| 2025-08-31 00:00:00|
| 黛布拉|2020-08-30 00:00:00| 2025-08-31 00:00:00|
fiddle