trunc(date,'IW')究竟是什么?

时间:2015-09-16 08:28:13

标签: sql oracle oracle11g date-formatting

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

您可能知道天数和数字之间的关联可能因地区而异,例如在德国,周一是1,周日是7,而在美国,周一是2,周日是1。

因此,在搜索解决方案时,我发现以下代码无论语言环境如何都可以正常工作,分配星期一= 1 ...星期日= 7:

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

有人可以解释一下它是如何运作的吗?特别是我无法理解这条指令是什么:

TRUNC (date, 'IW')
确实如此。

3 个答案:

答案 0 :(得分:7)

像往常一样,这是answered in the documentation,具体来说是:

  

IW日历周(1-52或1-53),由ISO 8601标准定义。日历周从星期一开始

答案 1 :(得分:7)

builder .RegisterAssemblyTypes(typeof(IRequest<>).Assembly) .Where(t => t.IsClosedTypeOf(typeof(IRequest<>))) .AsImplementedInterfaces(); builder .RegisterAssemblyTypes(typeof(IRequestHandler<,>).Assembly) .Where(t => t.IsClosedTypeOf(typeof(IRequestHandler<,>))) .AsImplementedInterfaces(); 返回一周的第一天。对我来说TRUNC(DATE,'IW')星期一回来。今天是2月21日星期二。减去那个星期一20日的TRUNC(SYSDATE,'IW),你将获得TRUNC(SYSDATE,'IW')(因为1)。像在等式的开头一样,将21-20=1添加到其中,然后得到1,我们将其与星期二联系起来。

答案 2 :(得分:3)

ISO 周的基本概念是使 NLS领域独立

来自documentation

  

基于ISO标准的一年中的一周(1-52或1-53)。

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