我制作了一个矩阵报告,其中需要根据选择参数动态显示列。我有一个日期选择参数。
如果我在选择参数上选择日期为“03/01/2010”,即2010年3月1日,那么它应该显示为3月1日至3月7日
答案 0 :(得分:4)
这取决于你所追求的。如果你在接下来的7天之后,那么:
select *
from my_table
where date_col between :my_date and :my_date + 7
如果您想在星期一到星期日说,请使用next_day
功能:
select *
from my_table
where date_col between next_day(:my_date, 'Monday') - 7
and next_day(:my_date, 'Monday')
:my_date
是您传入的日期。
如果您没有传递日期而是传递字符串,那么第一个就会变成,使用to_date
函数:
select *
from my_table
where date_col between to_date(:my_date,'dd/mm/yyy') + 7
and to_date(:my_date,'dd/mm/yyy')
你可以为第二个做类似的事情。如果您必须使用to_date
,则date_col
应该to_date(date_col,'dd/mm/yyyy')
{{1}},或者如果您将以不同方式对其进行转换。
答案 1 :(得分:4)
要获取按周计算的数据而不是接下来的七天数据,请使用带有TRUNCATE
参数的W
函数将数据划分为日历周。
select trunc(date '2012-01-30', 'w') from dual;
TRUNC(DATE'2012-01-
-------------------
2012-01-29 00:00:00
注意:截断到的星期几取决于NLS数据 - 在某些本地化周从星期日开始;在星期一的其他地方。