【问题标题】:$week mongodb to datepart(wk)$week mongodb 到 datepart(wk)
【发布时间】:2014-06-12 00:40:54
【问题描述】:

我正在将聚合数据从 mongodb 导出到 MS SQL 服务器

mongo 的 $week 不会与 T-SQL datepart(wk, ) 或 datepart(isowk, ) 计算为同一周。

有谁知道如何测试 mongodb $week 函数,以便我可以做一些比较,看看如何最好地解决这个问题?

任何帮助将不胜感激。

【问题讨论】:

    标签: mongodb aggregation-framework week-number datepart


    【解决方案1】:

    据我所知,差异分为两个主要领域,文档中描述了简单的部分:

    周从星期日开始,第 1 周从一年中的第一个星期日开始。一年中第一个星期日之前的日子在第 0 周。此行为与 strftime 标准库函数的“%U”运算符相同。

    所以这里的一般概念是返回的值将在 0 和 53 之间(含),第 0 周被定义为星期天之前的第一周。

    所以从technet source 中解释(因为文档弄错了日期)“datepart”:

    任何年份的 1 月 1 日定义星期日期部分的起始数字,例如:DATEPART (wk, 'Jan 1, xxxx') = 1,其中 xxxx 是任何年份。

    然后(更正):

    下表列出了每个 SET DATEFIRST 参数的“2007-04-21”的星期和工作日日期部分的返回值。 1 月 1 日是 2007 年的星期六。4 月 21 日是 2007 年的星期六。SET DATEFIRST 7,星期日,是美国英语的默认值。

    所以你有这样的文件:

    { "date" : ISODate("2007-01-01T00:00:00Z") }
    { "date" : ISODate("2006-12-31T00:00:00Z") }
    { "date" : ISODate("2006-01-01T00:00:00Z") }
    

    $week 运算符将返回如下所示:

    { "date" : ISODate("2007-01-01T00:00:00Z"), "week" : 0 }
    { "date" : ISODate("2006-12-31T00:00:00Z"), "week": 53 }
    { "date" : ISODate("2006-01-01T00:00:00Z"), "week" : 1 }
    

    2006 年 1 月 1 日是星期日,被认为是第 1 周的开始,但如果是星期六,则为 2007 年的第 0 周。上一年的 12 月 31 日是第 53 周。

    相比之下,DATEPART 将 2007 年 1 月 1 日和 2006 年 12 月 31 日视为第 1 周作为一年中第一个星期日结束的一周。星期日是默认的美国英语值,但可能会有所不同,实际上可以通过 SET DATEFIRST 设置

    因此,就一年中的第几周而言,两者对日期的归属有不同的看法,但总体差异将是一个,而其他考虑日期则在上一年年底。

    【讨论】:

    • 感谢 Neil,对于延迟回复表示歉意。这几天忙得不可开交。非常感谢您的帮助。
    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    相关资源
    最近更新 更多