在Oracle中,要獲得日期中的年份,例如把sysdate中的年份取出來,并不是一件難事。常用的方法是:Select to_number(to_char(sysdate,'yyyy')) from dual,而實際上,oracle本身有更好的方法,那就是使用Extract函數(shù),使用方法是:Select Extract(year from sysdate) from dual,這種方法省掉了類型轉(zhuǎn)換,看上去更加簡潔。相應(yīng)的,要取得月份或日,可以用select extract (month from sysdate) from dual和select extract (day from sysdate) from dual。
創(chuàng)新互聯(lián)長期為1000多家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為友誼企業(yè)提供專業(yè)的做網(wǎng)站、成都做網(wǎng)站,友誼網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
此方法獲得的結(jié)果,是數(shù)值型的,你可以設(shè)置一個方法測試一下。
設(shè):
1、數(shù)據(jù)表名稱為:TABLE1
2、TABLE1中的date字段名為:COLUMN1
獲取去年到今年的上月底的數(shù)據(jù)的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';
如果日期列是字符串類型:(假設(shè)數(shù)據(jù)格式是YYYYMMDD)
select * from 表名 where substr(日期,1,4)='2012' and substr(日期,5,4) between '0101' and '0103';
如果格式不是上述8位年月日的寫法(如2012-01-01,2012/01/01,請自行調(diào)整SUBSTR中截取起始位置和字符數(shù)兩個參數(shù)。
不會用函數(shù)嗎? 其實你就是想查去年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)