按周PL / SQL组

时间:2012-12-07 07:34:51

标签: plsql group-by

在MySQL中我正在使用

week(date,3)

获取正确的周分组值。

如何将其转换为PL / SQL?我试过以下但是mysql中的周函数3怎么样呢?

TRUNC (created_dt, 'IW')

2 个答案:

答案 0 :(得分:1)

Oracle正在使用数据库的NLS设置来确定如何计算周数,因此对于MySQL函数的“3”部分没有必要(根据Oracle)。我可以想象一下,选择这个选项仍然有用,但这再一次表明甲骨文并不完全了解在美国境外工作的需要。

答案 1 :(得分:1)

根据您上面的MYSQL规则,它会返回指定日期的周数,例如2012-12-07,3作为第二个参数定义了一周的第三天假定为星期一...

如果你看一下这篇文章,它说MYSQL WEEK()函数有8种方式可以表现。因此,您需要通过在PL / SQL中查找MYSQL Week等效函数来告诉我们您要实现的结果。

在大多数星际转发方式中,MYSQL WEEK(date[mode])返回给定日期的周数。

从重新阅读你的问题,我唯一抓住你想要实现PL / SQL中的第一个功能,所以你正在寻找一个等效的功能。

对于Oracle来说,它会略微变成RAMEN ......

  • W Week of month (1-5)其中week 1 starts on the first day of the month and ends on the seventh.它继续了今年的开始。例如。 2012年是星期天开始的, ORACLE THINKS ..............那几周是Sundays to Saturday
  • iw基于ISO标准的一周中的一周(1-52,1-53)。因此,周并不一定是在周日开始的。
  • WW一年中的一周(1-53),其中第1周从一年的第一天开始,并持续到一年的第七天。

默认情况下,Oracle NLS设置设置如下:

  • NLS_CALENDAR:Gregorian
  • NLS_DATE_LANGUAGE:AMERICAN
  • NLS_TERRITORY:AMERICA

因此,您可以通过操纵查询级别来建议Oracle遵循日历....

你可以这样:

select trunc('2012-12-07','YY') AS week_number, 
       to_number(to_char(trunc('2012-12-07','YY')+rownum-1,'D')) AS dayNumber_in_week
        from dual connect by level <= 365
where  to_char('2012-12-07','IW') = 3
and    to_char('2012-12-07','DY') = 'MON';