在Oracle中返回上一年的数据

时间:2017-09-25 08:48:14

标签: sql oracle

以下内容返回数据类型为日期

的所有值
select date_sent_to_registrations from tblquotesnew

如何只返回上一年的记录。那么,如果我今天运行查询,它将仅返回2016年的那些记录?

2 个答案:

答案 0 :(得分:2)

您可以使用:

SELECT *
FROM   tblquotesnew
WHERE  TRUNC( date_sent_to_registrations, 'YYYY' ) = ADD_MONTHS( TRUNC( SYSDATE, 'YYYY' ), -12 );

但是,TRUNC( date_sent_to_registrations, 'YYYY' )将不允许您在date_sent_to_registrations列上使用索引(您需要使用基于函数的索引),因此更高效的版本将是:

SELECT *
FROM   tblquotesnew
WHERE  date_sent_to_registrations >= ADD_MONTHS( TRUNC( SYSDATE, 'YYYY' ), -12 )
AND    date_sent_to_registrations <  TRUNC( SYSDATE, 'YYYY' );

答案 1 :(得分:0)

试试这个:

select date_sent_to_registrations from tblquotesnew
WHERE TRUNC(date_sent_to_registrations,'YYYY')=TRUNC(ADD_MONTHS(SYSDATE,-12),'YYYY')

如果该列上有分区或索引,则可以使用:

SELECT *
FROM   tblquotesnew
WHERE  date_sent_to_registrations >= ADD_MONTHS( TRUNC( SYSDATE, 'YYYY' ), -12 )
AND    date_sent_to_registrations <  TRUNC( SYSDATE, 'YYYY' );