1

在我使用的 MySQL 中

week(date,3)

获得正确的周分组值。

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

TRUNC (created_dt, 'IW')
4

2 回答 2

1

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

于 2012-12-07T08:07:02.907 回答
1

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

如果你看这篇文章,它说 MYSQLWEEK()函数有 8 种行为方式。因此,您必须通过在 PL/SQL 中查找 MYSQL Week 等效函数来告诉我们您要达到的结果。

在最直接的方式中,MYSQLWEEK(date[mode])返回给定日期的周数。

通过重新阅读您的问题,我抓住的唯一一件事是您想要在 PL/SQL 中实现第一个功能,因此您正在寻找一个等效的功能。

而使用甲骨文,它会变得有点拉面......

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

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

  • NLS_CALENDAR : 公历
  • NLS_DATE_LANGUAGE:美国
  • NLS_TERRITORY:美国

因此,您可以建议 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';
于 2012-12-08T14:57:12.830 回答