如何在Oracle Date中选择实际年份?

时间:2015-01-26 10:42:17

标签: sql oracle oracle10g oracle-sqldeveloper

我需要选择今年在公司注册的员工;该字段是日期类型(字段名称:datemp)所以我使用:

SELECT employee_name 
FROM employees 
WHERE datemp BETWEEN to_date(01-JAN-2015) AND to_date (31-DEC-2015)

还有另一种方法我可以说具有日期类型的字段的年份是在实际年份吗?

3 个答案:

答案 0 :(得分:1)

你总是可以这样做:

select employee_name
from   emploees
where  trunc(datemp, 'yyyy') = to_date('01/01/2015', 'dd/mm/yyyy'); -- or trunc(sysdate, 'yyyy') if you need it to refer to this year

(甚至...... to_char(datemp, 'yyyy') = '2015';

请记住,如果在datemp列上使用函数,则不再使用该列上的任何索引(除非基于函数的索引与列上的新函数匹配)。 / p>

答案 1 :(得分:1)

您可以从sysdate

中取出它
SELECT employee_name 
FROM employees 
WHERE EXTRACT(year FROM datemp) = EXTRACT(year FROM sysdate)

答案 2 :(得分:1)

如果您的datemp列上有索引,则此可能会使用范围扫描更好地执行,具体取决于表格中的数据年数:

SELECT employee_name
FROM employees
WHERE datemp >= TRUNC(SYSDATE,'YYYY')
AND datemp < ADD_MONTHS(TRUNC(SYSDATE,'YYYY'),12);

(但是,在实践中它的日期范围如此广泛,它仍然可能仍会进行全表扫描。)