如何 select Oracle Date 中的实际年份?
How to select actual year in Oracle Date?
我需要select今年在公司注册的员工;该字段是日期类型(字段名称:datemp)所以我使用了:
SELECT employee_name
FROM employees
WHERE datemp BETWEEN to_date(01-JAN-2015) AND to_date (31-DEC-2015)
是否有另一种方法可以让具有日期类型的字段的年份为实际年份?
你总是可以这样做:
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 列上使用了一个函数,则该列上的任何索引都将不再使用(除非有一个基于函数的索引与该列上的新函数相匹配)。
您可以从 sysdate
中提取它
SELECT employee_name
FROM employees
WHERE EXTRACT(year FROM datemp) = EXTRACT(year FROM sysdate)
如果您的 datemp
列上有索引,使用范围扫描 可能 性能更好,具体取决于 table:
SELECT employee_name
FROM employees
WHERE datemp >= TRUNC(SYSDATE,'YYYY')
AND datemp < ADD_MONTHS(TRUNC(SYSDATE,'YYYY'),12);
(但是,实际上它的日期范围如此之广,它可能仍然会进行完整的 table 扫描。)
我需要select今年在公司注册的员工;该字段是日期类型(字段名称:datemp)所以我使用了:
SELECT employee_name
FROM employees
WHERE datemp BETWEEN to_date(01-JAN-2015) AND to_date (31-DEC-2015)
是否有另一种方法可以让具有日期类型的字段的年份为实际年份?
你总是可以这样做:
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 列上使用了一个函数,则该列上的任何索引都将不再使用(除非有一个基于函数的索引与该列上的新函数相匹配)。
您可以从 sysdate
SELECT employee_name
FROM employees
WHERE EXTRACT(year FROM datemp) = EXTRACT(year FROM sysdate)
如果您的 datemp
列上有索引,使用范围扫描 可能 性能更好,具体取决于 table:
SELECT employee_name
FROM employees
WHERE datemp >= TRUNC(SYSDATE,'YYYY')
AND datemp < ADD_MONTHS(TRUNC(SYSDATE,'YYYY'),12);
(但是,实际上它的日期范围如此之广,它可能仍然会进行完整的 table 扫描。)