十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
1、创建测试表,
创新互联专注于网站建设,为客户提供做网站、成都网站建设、网页设计开发服务,多年建网站服务经验,各类网站都可以开发,品牌网站制作,公司官网,公司展示网站,网站设计,建网站费用,建网站多少钱,价格优惠,收费合理。
create table test_date_2(id int, v_date date);
2、插入测试数据
insert into test_date_2 values(1,sysdate);
insert into test_date_2 values(2,sysdate-20);
insert into test_date_2 values(3,sysdate-30);
insert into test_date_2 values(4,sysdate-40);
commit;
3、查询表中全量数据,select t.* from test_date_2 t;
4、编写语句,查询当月份的上一个月;
select t.*, add_months(v_date,-1) v_date2 from test_date_2 t;
你不是写出来了么?
to_date( to_char(sysdate,'YYYY-MM')|| '-01','YYYY-MM-DD')取得月初
add_months(to_date( to_char(sysdate,'YYYY-MM')|| '-01','YYYY-MM-DD') ,1) 取得下月初
具体 where 子句如下
oper_date = to_date( to_char(sysdate,'YYYY-MM')|| '-01','YYYY-MM-DD')
and oper_date add_months(to_date( to_char(sysdate,'YYYY-MM')|| '-01','YYYY-MM-DD') ,1)
当月数据
select * from table t
where t.create_time
=TRUNC(SYSDATE, 'MM')
and
t.create_time=last_day(SYSDATE) create_time为你要查询的时间
当年数据
select * from table t
where t.create_time
=trunc(sysdate,'YYYY')
and
t.create_time=add_months(trunc(sysdate,'YYYY'),12)-1
本周(国外周日为一个星期第一天)
where t.create_time =trunc(sysdate,'day')+1 and
t.create_time=trunc(sysdate,'day')+6 本周(国内周一为一个星期第一天)
where t.create_time =trunc(next_day(sysdate-8,1)+1) and
t.create_time=trunc(next_day(sysdate-8,1)+7)+1
如果有时间字段世界字段是可以直接比较大小的。
比如
select * from table where 时间字段to_date(20161001,'yyyymmdd')
具体的写法根据你的时间字段的不同来具体写,并不是完全一样的。
比如你的时间字段可能包括时分秒,可能是2016-10-01,也可能是月日年,总之用to_date函数就可以实现相应的功能,具体用法自己查询一下。
需要看日期字段存储的是字符还是日期类型的数据,方法略有不同
如果存储的是字符型(如2015-09-01类型的数据)字段,可用以下语句:
select * from 表名 where to_char(sysdate,'yyyy-mm')=substr(日期字段,1,7);
如果存储的是日期型字段,可用以下语句:
select * from 表名 where to_char(sysdate,'yyyy-mm')=to_char(日期字段,'yyyy-mm');
所用函数说明:
to_char在语句中是将日期转为字符的函数,格式则为函数中设定的'yyyy-mm'格式。
sysdate代表当前日期时间,是日期型数据。
substr是截取函数,第一个参数为要截图的字段,第二个参数为截取的起始位,第三个参数代表截取的长度。