如何在Oracle中获取按周计算的数据

时间:2012-01-30 17:34:50

标签: sql oracle

我制作了一个矩阵报告,其中需要根据选择参数动态显示列。我有一个日期选择参数。

如果我在选择参数上选择日期为“03/01/2010”,即2010年3月1日,那么它应该显示为3月1日至3月7日

2 个答案:

答案 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数据 - 在某些本地化周从星期日开始;在星期一的其他地方。