我在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以返回前几个月的开始和结束日期?
答案 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')