trunc(date, 'IW') 到底是做什么的?

What exactly does trunc(date, 'IW')?

对于我的项目,我需要在星期几和 1...7 值之间建立绝对数字对应关系。

您可能知道,日期和数字之间的关联会因区域设置而异,例如在德国,星期一是 1,星期日是 7,而在美国,星期一是 2,星期日是 1。

因此,在寻找解决方案时,我发现以下代码似乎与语言环境无关,分配星期一=1...星期日=7:

1 + TRUNC (date) - TRUNC (date, 'IW')

谁能解释一下它是如何工作的?特别是我无法理解这条指令是什么:

TRUNC (date, 'IW')

确实如此。

ISO 周的最基本概念是使其 NLS 领土独立

来自documentation,

Week of year (1-52 or 1-53) based on the ISO standard.

一周从星期一开始,在星期日结束。

TRUNC(DATE,'IW') returns 一周的第一天。对我来说 TRUNC(SYSDATE,'IW) returns 星期一。今天是 2 月 21 日,星期二。从 TRUNC(SYSDATE,'IW') 中减去,即 20 日星期一,您将得到 1(因为 21-20=1)。将 1 添加到您在等式开头所做的那样,您将得到 2,我们将其与星期二相关联。