在Oracle中,要获得日期中的年份,例如把sysdate中的年份取出来,并不是一件难事。常用的方法是:Select to_number(to_char(sysdate,'yyyy')) from dual,而实际上,oracle本身有更好的方法,那就是使用Extract函数,使用方法是:Select Extract(year from sysdate) from dual,这种方法省掉了类型转换,看上去更加简洁。相应的,要取得月份或日,可以用select extract (month from sysdate) from dual和select extract (day from sysdate) from dual。
创新互联长期为1000多家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为友谊企业提供专业的做网站、成都做网站,友谊网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。
此方法获得的结果,是数值型的,你可以设置一个方法测试一下。
设:
1、数据表名称为:TABLE1
2、TABLE1中的date字段名为:COLUMN1
获取去年到今年的上月底的数据的SQL如下:
select *
from TABLE1 t
where t.COLUMN1 = add_months(trunc(sysdate,'YYYY'),-12)
and t.COLUMN1 trunc(sysdate,'MM')
如果日期列是日期类型:
seelct * from 表名 where to_char(日期,'mmdd') between '0101' and '0103' and to_char(日期,'yyyy')='2012';
如果日期列是字符串类型:(假设数据格式是YYYYMMDD)
select * from 表名 where substr(日期,1,4)='2012' and substr(日期,5,4) between '0101' and '0103';
如果格式不是上述8位年月日的写法(如2012-01-01,2012/01/01,请自行调整SUBSTR中截取起始位置和字符数两个参数。
不会用函数吗? 其实你就是想查去年1月到去年今天的语句吧?一看就知道是想算同比了。
ADD_MONTHS(sysdate,-12) 去年今天
ADD_MONTHS(trunc(sysdate,'yyyy') ,-12)去年第一天
where DATE=ADD_MONTHS(trunc(sysdate,'yyyy') ,-12) and date=ADD_MONTHS(sysdate,-12)
或者 where date between ADD_MONTHS(trunc(sysdate,'yyyy') ,-12) and ADD_MONTHS(sysdate,-12)