我正在将聚合数据从 mongodb 导出到 MS SQL 服务器
mongo 的 $week 不会与 T-SQL datepart(wk, ) 或 datepart(isowk, ) 计算为同一周。
有谁知道如何测试 mongodb $week 函数,以便我可以进行一些比较,看看如何最好地解决这个问题?
任何帮助,将不胜感激。
我正在将聚合数据从 mongodb 导出到 MS SQL 服务器
mongo 的 $week 不会与 T-SQL datepart(wk, ) 或 datepart(isowk, ) 计算为同一周。
有谁知道如何测试 mongodb $week 函数,以便我可以进行一些比较,看看如何最好地解决这个问题?
任何帮助,将不胜感激。
据我所见,差异分为两个主要领域,文档中描述了简单的部分:
周从星期日开始,第 1 周从一年中的第一个星期日开始。一年中第一个星期日之前的日子在第 0 周。此行为与 strftime 标准库函数的“%U”运算符相同。
所以这里的一般概念是返回的值将在 0 到 53 之间,其中第 0 周被定义为星期天之前的第一周。
因此,从technet 源中对“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 设置
因此,两者对日期在一年中的星期几的归属有不同的看法,但总体差异将是一个与其他考虑日期落在上一年年底的日期。