【问题标题】:How can I return the employee names from table hr.employees who were hired on first half of the month in last month of every quarter如何从表 hr.employees 中返回每个季度最后一个月上半月雇用的员工姓名
【发布时间】:2021-04-06 19:23:06
【问题描述】:

我需要在一个季度的最后一个月获得上半年雇用的员工 就像我需要在第 9 个月和第 12 个月从(1/3 到 15/3)和(1/6 到 15/6)雇用的员工一样

【问题讨论】:

    标签: oracle date-format


    【解决方案1】:

    您可以使用MONTHS_BETWEEN 和TRUNC:

    如果您想要hire_date 的时刻在该季度第三个月的上半月的行,那么:

    SELECT *
    FROM   hr.employees
    WHERE  MONTHS_BETWEEN( hire_date, TRUNC( hire_date, 'Q' ) ) BETWEEN 2 AND 2.5;
    

    如果您想要hire_date 的整日在该季度第三个月的上半月内的行,则:

    SELECT *
    FROM   employees
    WHERE  MONTHS_BETWEEN(
             TRUNC( hire_date ) + INTERVAL '23:59:59' HOUR TO SECOND,
             TRUNC( hire_date, 'Q' )
           ) BETWEEN 2 AND 2.5;
    

    或者,如果您想手动设置边界:

    SELECT *
    FROM   employees
    WHERE  EXTRACT( MONTH FROM hire_date ) IN ( 3, 6, 9, 12 )
    AND    EXTRACT( DAY FROM hire_date ) BETWEEN 1 AND 15;
    

    db小提琴here

    【讨论】:

    • 我需要在每年的第 3 个月和第 6 个月以及第 9 个月和第 12 个月获得所有上半年雇用的员工
    • @Exclisior 这就是这样做的;它查找从包含该日期的季度开始算起 2 到 2.5 个月之间的日期。检查 dbfiddle,你会看到它返回的日期。
    • @Exclisior 第一个查询返回hire_date 时刻在三月、六月、九月和十二月的上半月的行;第二个查询返回整个hire_date 日在三月、六月、九月和十二月的上半月内的行。这似乎是您的要求所要求的,我不确定您所说的是错误的。如果您对该问题的规范有疑问,请edit 澄清您的问题。
    • 不,就是这样,非常感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2018-09-19
    • 2018-10-19
    • 1970-01-01
    • 2022-01-20
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多