问题描述
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