Oracle如何获取一个年月的第一天和最后一天?

比如我的表是web_date,字段有year_month,year_month的数据格式是日期格式yyyymm(年月)例如201502,那么我想写一条一句select XX fromweb_date where year_month='201502'当我这样写以后select出来的是2015-02-01到2015-02-28也就是这个月的第一天和最后一天没那么这个SQL语句怎么写?

这个就可以查出你web_date中指定某年某月第一天、最后一天的数据了:

但如果你的字段year_month是date类型的,就这样写:
select * from web_date a where a.year_month in
(select to_date('201502'||'01','yyyymmdd') from dual
union all(select to_date(to_char(last_day(to_date('201502', 'yyyymm')),'yyyymmdd'),'yyyymmdd')from dual));

但如果你的字段year_month是char类型的,就这样写:
select * from web_date a where a.year_month in
( select '201502'||'01' from dual
union all( select to_char(last_day(to_date('201502', 'yyyymm')),'yyyymmdd')from dual));

'201502'这个是变量,你可以任意更改。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-06-19
想要第一天可以用to_date(201502,'yyyymm'),结果就是2015-02-01就是2月第一天,但是是日期格式的,想转回去再to_char就是
最后一天也好办,to_date得到第一天后-1就是上个月最后一天,如果你想得到2月最后一天,就(to_number('201502')+1)得到3月,再to_date得到03-01,再-1就是2月最后一天
详细代码我就不写了我相信给了你思路你就明白代码怎么写了,我也相信这样讲解对你更有帮助
第2个回答  2015-03-03
select xxx from web_date where year_month between last_day(add_months(to_date(concat(&x,'15'),'yyyy-mm-dd'),-1))+1 and last_day(to_date(concat(&x,'15'),'yyyy-mm-dd'));

例子
SQL> select last_day(add_months(to_date(concat(&x,'15'),'yyyy-mm-dd'),-1))+1,last_day(to_date(concat(&x,'15'),'yyyy-mm-dd')) from dual;
输入 x 的值: 201502
输入 x 的值: 201502
原值 1: select last_day(add_months(to_date(concat(&x,'15'),'yyyy-mm-dd'),-1))+1,last_day(to_date(concat(&x,'15'),'yyyy-mm-dd')) from dual
新值 1: select last_day(add_months(to_date(concat(201502,'15'),'yyyy-mm-dd'),-1))+1,last_day(to_date(concat(201502,'15'),'yyyy-mm-dd')) from dual

LAST_DAY(ADD_M LAST_DAY(TO_DA
-------------- --------------
01-2月 -15 28-2月 -15
第3个回答  2015-03-03
SELECT trunc(sysdate,'mm'),add_months(trunc(sysdate,'mm'),1)-1 FROM DUAL