oracle怎么查询上周的数据(例如今天是周日,我要查询出上个周一到周日的数据)
2个回答
展开全部
--1、取某天在本周中的第几天(默认周日开始算第1天)
select to_char(to_date('2011-04-11','yyyy-mm-dd'), 'd') from dual;
--2、如果要从周一开始算第1天,需要做一些手脚
--大概思路是:1变成7,2变成1,3变成2......,7变成6
select decode(to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd'),
1,
7,
to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd') - 1)
from dual;
--3、再根据上面的结论倒推到上周时间
select to_date('2011-04-04', 'yyyy-mm-dd') -
decode(to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd'),
1,
7,
to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd') - 1) - 7 + 1,
to_date('2011-04-04', 'yyyy-mm-dd') -
decode(to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd'),
1,
7,
to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd') - 1) - 7 + 1 + 6
from dual;
select to_char(to_date('2011-04-11','yyyy-mm-dd'), 'd') from dual;
--2、如果要从周一开始算第1天,需要做一些手脚
--大概思路是:1变成7,2变成1,3变成2......,7变成6
select decode(to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd'),
1,
7,
to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd') - 1)
from dual;
--3、再根据上面的结论倒推到上周时间
select to_date('2011-04-04', 'yyyy-mm-dd') -
decode(to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd'),
1,
7,
to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd') - 1) - 7 + 1,
to_date('2011-04-04', 'yyyy-mm-dd') -
decode(to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd'),
1,
7,
to_char(to_date('2011-04-04', 'yyyy-mm-dd'), 'd') - 1) - 7 + 1 + 6
from dual;
展开全部
select * from table
where time between (trunc(sysdate-7,'DD')-to_char(sysdate-7,'D')+2) and
(trunc(sysdate-7,'DD')-to_char(sysdate-7,'D')+8)
where time between (trunc(sysdate-7,'DD')-to_char(sysdate-7,'D')+2) and
(trunc(sysdate-7,'DD')-to_char(sysdate-7,'D')+8)
追问
11年4月4号是周一,我要查询上周一至上周日的数据,也就是3月28号至4月3号之间的数据!但是4月3号的数据用你的查询语句是查不出来滴
追答
我在本地测试的时候是好好的,莫非那个环节出问题了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询