2015-01-26 2 views
1

Мне нужно выбрать сотрудников, зарегистрированных в компании в этом году; поле является дата типа (имя поля: datemp), поэтому я использовал:Как выбрать фактический год в Oracle Date?

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

есть другой способ я могу сказать, что год поля, которое имеет тип даты в фактическом году?

ответ

1

Вы можете вытащить его из sysdate

SELECT employee_name 
FROM employees 
WHERE EXTRACT(year FROM datemp) = EXTRACT(year FROM sysdate) 
+0

Вот и все благодаря мужчине – elie

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, какие индексы на этой колонке будет не дольше использовать (если не существует функционального индекса, который соответствует новой функции в столбце).

1

Если индекс на вашей datemp колонке, это может работать лучше, используя сканирование диапазона, в зависимости от того, сколько лет данных в таблице:

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

(Но на практике это такой широкий диапазон дат он будет, вероятно, по-прежнему делать полный просмотр таблицы в любом случае.)