【发布时间】:2012-01-09 14:20:22
【问题描述】:
假设在 oracle 11.g 数据库中,我们正在尝试添加新员工,如果我们在当月 15 日以下的任何一天雇用(假设是这样),那么我们为他写下当月的hiredate ,否则下个月, 例如假设现在是 12 月,如果我雇用新员工时少于 12 月 15 日,那么它的雇用月份将是同一个 12 月,但如果超过 15,例如 15,16 等等,那么他的雇用月将是一月,我如何确定每个月雇用超过 15 名员工的员工? 非常感谢
【问题讨论】:
假设在 oracle 11.g 数据库中,我们正在尝试添加新员工,如果我们在当月 15 日以下的任何一天雇用(假设是这样),那么我们为他写下当月的hiredate ,否则下个月, 例如假设现在是 12 月,如果我雇用新员工时少于 12 月 15 日,那么它的雇用月份将是同一个 12 月,但如果超过 15,例如 15,16 等等,那么他的雇用月将是一月,我如何确定每个月雇用超过 15 名员工的员工? 非常感谢
【问题讨论】:
查找 Oracle 的 to_char 函数。这将允许您从日期中提取特定值。
to_char(data_value,'DD') 例如,会给你一个月中的哪一天。
【讨论】:
你可以使用 ROUND 函数,像这样:
select round(<yourdate>, 'MONTH') hire_month from dual
【讨论】:
试试:
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>
希望对你有帮助...
【讨论】: