【问题标题】:Oracle SQL Anniversary Dates QueryOracle SQL 周年日期查询
【发布时间】:2021-10-21 05:19:28
【问题描述】:

我需要一些帮助来创建一个显示企业员工周年纪念日的查询。我需要在我选择的两个日期内运行报告并显示结果。我希望报告也显示历史周年数据。

我想要列 NAME、ANNIVERSARY DATE、YEARS WITH BUSINESS

我在数据集中的列是姓名和工作日期。

感谢任何帮助!

TIA

【问题讨论】:

  • 到目前为止你尝试过什么?你停在哪里?什么不起作用?
  • 向我们展示一些示例表数据和预期结果 - 全部为格式化文本(不是图像)。minimal reproducible example

标签: sql oracle oracle11g


【解决方案1】:

使用MONTHS_BETWEENADD_MONTHS

SELECT name,
       date_of_employment,
       ADD_MONTHS(
         date_of_employment,
         (EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM date_of_employment))*12
       ) AS anniversary,
       MONTHS_BETWEEN(SYSDATE, date_of_employment)/12
         AS years_with_business,
       TRUNC(MONTHS_BETWEEN(SYSDATE, date_of_employment)/12)
         AS full_years_with_business
FROM   table_name;

其中,对于样本数据:

CREATE TABLE table_name ( name, date_of_employment ) AS
SELECT 'Alice',   ADD_MONTHS(TRUNC(SYSDATE - 1), -120) FROM DUAL UNION ALL
SELECT 'Beryl',   ADD_MONTHS(TRUNC(SYSDATE + 0), -120) FROM DUAL UNION ALL
SELECT 'Carol',   ADD_MONTHS(TRUNC(SYSDATE + 1), -120) FROM DUAL UNION ALL
SELECT 'Debra',   ADD_MONTHS(TRUNC(SYSDATE - 1),  +12) FROM DUAL UNION ALL
SELECT 'Emma',    ADD_MONTHS(TRUNC(SYSDATE + 0),  +12) FROM DUAL UNION ALL
SELECT 'Frances', ADD_MONTHS(TRUNC(SYSDATE + 1),  +12) FROM DUAL;

输出:

NAME DATE_OF_EMPLOYMENT ANNIVERSARY YEARS_WITH_BUSINESS FULL_YEARS_WITH_BUSINESS
Alice 2011-08-18 00:00:00 2021-08-18 00:00:00 10.00435082511947431302270011947431302267 10
Beryl 2011-08-19 00:00:00 2021-08-19 00:00:00 10 10
Carol 2011-08-20 00:00:00 2021-08-20 00:00:00 9.99897448103345280764635603345280764633 9
Debra 2022-08-18 00:00:00 2021-08-18 00:00:00 -.9956491748805256869772998805256869773 0
Emma 2022-08-19 00:00:00 2021-08-19 00:00:00 -1 -1
Frances 2022-08-20 00:00:00 2021-08-20 00:00:00 -1.00102551896654719235364396654719235364 -1

db小提琴here

【讨论】:

  • 谢谢!如果我想添加一个可以选择两个日期的日期参数,我是否需要调整 (EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM date_of_employment))*12 作为周年查询而不是 SYSDATE 我添加 &TO_DATE ?
  • 只需将SYSDATEdate_of_employment 替换为您的另外两个日期。
  • 如果我从 2020 年 1 月 4 日到 2021 年 3 月 31 日运行一段时期,这只会带回 2021 年的周年纪念日,而不是两个日期之间的所有周年纪念日?你能告诉我需要修改什么以显示正确的结果吗? TIA
  • @Yasir 您需要 edit 您的问题以包含 minimal reproducible example 与:CREATE TABLE 表的语句; INSERT 语句用于数据的最小示例;该样本数据的预期输出;并解释为什么你想要那个预期的输出。你没有得到你期望的结果,因为你没有告诉我们你期望什么,而且我们不是心灵感应,所以我们只是对这个问题给出了最好的解释。
猜你喜欢
  • 2012-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-17
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
  • 2013-07-02
相关资源
最近更新 更多