ORA-00904: "DAYS": 无效标识符
Posted
技术标签:
【中文标题】ORA-00904: "DAYS": 无效标识符【英文标题】:ORA-00904: "DAYS": invalid identifier 【发布时间】:2018-09-27 20:54:34 【问题描述】:这是我的代码:
SELECT (first_name || ' ' || last_name) AS Name, hire_date, days FROM EMPLOYEES WHERE days > 365*6;
这是我应该做的: 从 EMPLOYEES 表中创建一个 SQL 查询,显示 first_name、last_name、hire_date 和员工工作的天数。使用连接运算符将 first_name 和 last_name 放在结果集中的同一列中,两个名称之间有一个空格。使用日期算术仅显示工作时间超过 6 年 (365 * 6) 的员工。
谁能帮我弄清楚我的错误是什么?
【问题讨论】:
很明显,days
不是employees
中的列。
错误信息的哪一部分不清楚?您的表是否有名为DAYS
的列?如果不是,那么您知道这就是问题所在。
任务中有提示:“使用日期算术...”。您已经知道雇用日期,那么您将如何获得使用该日期的天数?
显然 365 * 6 与六年不一样,但如果这是你的家庭作业要求的,那很好......
【参考方案1】:
要更正您的查询,您需要执行日期算术。
SELECT
(first_name || ' ' || last_name) AS name,
hire_date,
ROUND(sysdate - hire_date) AS days
FROM hr.employees
WHERE sysdate - hire_date > 6*365;
但是如果你分析 -> hr schema,你会发现,有与这个任务相关的 job_history 表。在我看来,正确的解决方案应该是这样的:
SELECT a1.name,
a1.hire_date,
a1.days
FROM
(SELECT employees.employee_id,
(employees.first_name || ' ' || employees.last_name) AS name,
employees.hire_date,
SUM(NVL(job_history.end_date, TRUNC(sysdate)) - NVL(job_history.start_date, hire_date)) AS days
FROM hr.employees
LEFT JOIN hr.job_history
ON job_history.employee_id = employees.employee_id
GROUP BY employees.employee_id,
(employees.first_name || ' ' || employees.last_name),
employees.hire_date
) a1
WHERE days > 365*6;
【讨论】:
【参考方案2】:您可以尝试在招聘日设置过滤器
雇佣日期> sysdate - 365*6
【讨论】:
【参考方案3】:这会起作用;
WHERE sysdate-hire_date >= 365*6
【讨论】:
以上是关于ORA-00904: "DAYS": 无效标识符的主要内容,如果未能解决你的问题,请参考以下文章
ORA-00904: 无效标识符 00904. 00000 - "%s: 无效标识符"
ORA-00904: "CEILING": ORACLE 11G 中的标识符无效