在我使用的 MySQL 中
week(date,3)
获得正确的周分组值。
如何将其转换为 PL/SQL?我尝试了以下方法,但是3
mysql 中的这个 from week 函数呢?
TRUNC (created_dt, 'IW')
Oracle 正在使用数据库的 NLS 设置来确定应如何计算周数,因此(根据 Oracle)不需要 MySQL 函数的“3”部分。我可以想象,拥有这个选项仍然应该有用,但这再次表明甲骨文并未完全了解在美国以外工作的需求。
根据您上面的 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 设置如下:
因此,您可以建议 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';