以下代码不是Oracle中的有效月份错误

问题描述

我收到以下代码的“无效月份”错误

SELECT last_name,employee_id,hire_date
FROM employees
WHERE EXTRACT(YEAR FROM TO_DATE(hire_date,'DD-MON-RR')) > 1998
ORDER BY hire_date;

解决方法

我在这里看不到使用extract()的意义。这是次优的,因为数据库需要先将该函数应用于列中的所有值,然后才能进行过滤。我建议针对文字日期直接过滤:

where hire_date >= date '1999-01-01'

此谓词将利用hire_date上的索引。您甚至可以在索引中添加更多列,以完全覆盖查询,例如:(hire_date,last_name,employee_id)

,

假设这是Oracle教程中的with recursive cte (sub_category_id,category_id) as ( select sub_category_id,category_id from category_table where category_id = 3267 union all select ct.sub_category_id,ct.category_id from category_table ct inner join cte on ct.category_id = cte.sub_category_id ) select sub_category_id as leaf_id from cte where sub_category_id not in (select distinct category_id from category_table) 表,employees已经是hire_date列。您无需在其上使用date

to_date