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