【问题标题】:What exactly does trunc(date, 'IW')?trunc(date, 'IW') 到底是什么?
【发布时间】:2015-09-16 08:28:13
【问题描述】:

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

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

因此,在寻找解决方案时,我发现以下代码似乎可以在任何区域设置下工作,分配 Monday=1...Sunday=7:

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

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

TRUNC (date, 'IW')

确实如此。

【问题讨论】:

  • trunc(date,'IW') 返回一周的第一天,不受 nls_territory 设置的影响,请参阅docs.oracle.com/cd/B19306_01/server.102/b14200/…。只有格式字符串 DAY、DY 和 D 受到影响。
  • @FrankOckenfuss 嗯,不。 IW 返回 ISO 周的第一天(星期一),因此完全不受 nls_territory_settings 的影响。
  • @Boneist 你是对的,我的第一个答案是快:-D

标签: sql oracle oracle11g date-formatting


【解决方案1】:

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

【讨论】:

  • 我喜欢用例子来解释,而不仅仅是放官方文档。谢谢!
【解决方案2】:

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

来自documentation

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

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

【讨论】:

猜你喜欢
  • 2021-10-27
  • 1970-01-01
  • 2017-05-23
  • 1970-01-01
  • 1970-01-01
  • 2013-02-06
  • 2013-05-05
  • 2010-11-19
  • 2012-06-16
相关资源
最近更新 更多