Plsql PL/SQL每周分组

Plsql PL/SQL每周分组,plsql,group-by,Plsql,Group By,在MySQL中,我正在使用 week(date,3) 以获取周分组的正确值 如何将其转换为PL/SQL?我已经尝试了以下方法,但是mysql中的3fromweek函数呢 TRUNC (created_dt, 'IW') Oracle正在使用数据库的NLS设置来确定如何计算周数,因此(根据Oracle的说法)不需要MySQL函数的“3”部分。我可以想象,拥有这个选项仍然是有用的,但这再次表明Oracle并不完全理解在美国以外工作的需要。基于您上面的MYSQL声明,它返回指定日期的一周,例如20

在MySQL中,我正在使用

week(date,3)
以获取周分组的正确值

如何将其转换为PL/SQL?我已经尝试了以下方法,但是mysql中的
3
fromweek函数呢

TRUNC (created_dt, 'IW')

Oracle正在使用数据库的NLS设置来确定如何计算周数,因此(根据Oracle的说法)不需要MySQL函数的“3”部分。我可以想象,拥有这个选项仍然是有用的,但这再次表明Oracle并不完全理解在美国以外工作的需要。

基于您上面的MYSQL声明,它返回指定日期的一周,例如2012-12-07,3因为第二个论点定义了一周的第三天被假定为星期一

如果你看这篇文章,它会说MYSQL
WEEK()
函数有8种行为方式。因此,您必须通过在PL/SQL中查找与MYSQL Week等效的函数,让我们知道您试图实现的结果

在大多数情况下,MYSQL
WEEK(date[mode])
返回给定日期的周数

通过重新阅读您的问题,我了解到的唯一一件事是您希望在PL/SQL中实现第一个特性,因此您正在寻找一个等效的函数

有了甲骨文,它就有了一点拉面

  • W月初一周(1-5)
    其中
    1周开始于月初一天,结束于月初七。
    它与一年的开始方式有关。例如,2012年开始于周日,甲骨文认为。。。。。。。。。。。。。。这几周是星期日到星期六
  • iw
    基于ISO标准的一年中的一周(1-52,1-53)。因此,这几周不一定从周日开始
  • WW
    一年中的一周(1-53),其中第一周从一年中的第一天开始,持续到一年中的第七天
默认情况下,Oracle NLS设置设置为:

  • NLS_日历:公历
  • NLS_日期_语言:美语
  • NLS_领土:美国
因此,您可以建议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';
选择trunc('2012-12-07','YY')作为周号,
to_number(to_char(trunc('2012-12-07','YY')+rownum-1,'D'))作为周内的日数
从双连接到分层连接