根据他被雇用的日期选择月份

时间:2011-11-30 10:23:41

标签: sql oracle oracle11g

假设在oracle 11.g数据库中,我们正在尝试添加新的雇员,如果我们在当前月份的15天内雇用(让我们这样说),那么我们就为他当前写一个hiredate作为当月,否则下个月, 例如,假设现在是12月,如果我雇用新员工的时间少于12月15日,那么它的雇佣月份将是12月相同,但是如果超过15,例如15,16,等等,那么他的hire_month将是一月,我怎样才能确定每个月雇佣员工的人数超过15人? 非常感谢

3 个答案:

答案 0 :(得分: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>

希望它有所帮助...

答案 1 :(得分:1)

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

例如,

to_char(data_value,'DD')将为您提供月中的某一天。

答案 2 :(得分:0)

您可以使用ROUND功能,如下所示:

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