【问题标题】:choose month according to number of date he has been hired根据他被雇用的日期数选择月份
【发布时间】:2012-01-09 14:20:22
【问题描述】:

假设在 oracle 11.g 数据库中,我们正在尝试添加新员工,如果我们在当月 15 日以下的任何一天雇用(假设是这样),那么我们为他写下当月的hiredate ,否则下个月, 例如假设现在是 12 月,如果我雇用新员工时少于 12 月 15 日,那么它的雇用月份将是同一个 12 月,但如果超过 15,例如 15,16 等等,那么他的雇用月将是一月,我如何确定每个月雇用超过 15 名员工的员工? 非常感谢

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:

    查找 Oracle 的 to_char 函数。这将允许您从日期中提取特定值。

    to_char(data_value,'DD') 例如,会给你一个月中的哪一天。

    【讨论】:

      【解决方案2】:

      你可以使用 ROUND 函数,像这样:

      select round(<yourdate>, 'MONTH') hire_month from dual
      

      【讨论】:

      • 仅在每月的 16 日进行舍入,OP 需要在 15 日进行舍入。
      【解决方案3】:

      试试:

      SELECT (CASE 
                 WHEN EXTRACT(day FROM hiredate) < 15
                 THEN EXTRACT(month FROM hiredate)
                 ELSE (EXTRACT(month FROM hiredate) + 1)
               END) AS HireMonth
        FROM employee
       WHERE empno = <your number>
      

      如果你想要月份的名称,那么:

      SELECT (CASE 
                 WHEN EXTRACT(day FROM hiredate) < 15
                 THEN TO_CHAR(hiredate, 'Month')
                 ELSE TO_CHAR(ADD_MONTHS(hiredate, 1), 'Month')
               END) AS HireMonth
        FROM employee
       WHERE empno = <your number>
      

      编辑:因为您不能使用 CASE,所以这里有一个替代方案(尽管使用 CASE 更好):

      SELECT TO_CHAR(hiredate, 'Month') AS hireMonth
        FROM employee
       WHERE EXTRACT(day FROM hiredate) < 15
         AND empno = <your number>
       UNION ALL
      SELECT TO_CHAR(ADD_MONTHS(hiredate, 1), 'Month') AS hireMonth
        FROM employee
       WHERE EXTRACT(day FROM hiredate) >= 15
         AND empno = <your number>
      

      希望对你有帮助...

      【讨论】:

      • 是的,它会很好,但我还没有在这里学习案例,如果-否则我需要它用于中期
      • @Dato,我不明白你的评论。你需要什么?
      • 我说我还没有研究过 case 和 if-else 函数,不使用这些函数我可以做同样的事情吗
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      • 2021-10-31
      • 2018-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多