在前几个月与变量之间开始和停止

时间:2014-06-25 11:35:33

标签: oracle

我在sysdate中使用以下WHERE来获取范围。

WHERE TO_CHAR(mopstart, 'yyyy-mm-dd hh24:mi:ss') BETWEEN TO_CHAR(sysdate,'YYYY-MM-DD')||' 21:00:00' AND TO_CHAR(sysdate+1,'YYYY-MM-DD')||' 20:59:59' 

我的问题是,如何使用变量创建BETWEEN以返回前几个月的开始和结束日期?

2 个答案:

答案 0 :(得分:1)

如果我理解你,那就是:

where ... between trunc(add_months(sysdate, -1), 'MON') and trunc(sysdate, 'MON') - 1

还有一件事:不要使用TO_CHAR来比较日期,只需使用日期和间隔。

答案 1 :(得分:1)

你通常不会使用BETWEEN。就像在现实生活中一样,你不会说“从上个月开始到上个月末的时间”,而只是“上个月”,所以你会用SQL做。

知道一个月实际上是年份和月份:

where extract(year from mopstart) = extract(year from sysdate) 
and extract(month from mopstart) = extract(month from sysdate) - 1 

或者:

where to_char(mopstart,'yyyymm') = to_char(add_months(sysdate,-1),'yyyymm')