1

我试图找出两天之间的周数。当差异为 8 天时,我应该得到 1 或 2 周,具体取决于函数在 Redshift 中的工作方式(向上或向下舍入)。但是,无论选择哪种方式,它都应该是一致的。

我意识到我可以简单地取天数然后除以 7 并执行 ROUND 或 CEIL,但我只是想了解为什么 DATEDIFF(weeks, date1, date2) 在我有 1 或 2 时提供两个相差 8 天的日期。

SELECT
DATEDIFF(weeks, '2019-03-17', '2019-03-25') AS week_difference1,
DATEDIFF(days, '2019-03-17', '2019-03-25') AS day_difference1,

DATEDIFF(weeks, '2019-03-16', '2019-03-24') AS week_difference2,
DATEDIFF(days, '2019-03-16', '2019-03-24') AS day_difference2

结果:week_difference1 = 1

day_difference1 = 8

week_difference2 = 2

day_difference2 = 8

4

1 回答 1

1

与来自美国的许多软件产品一样,Redshift 中一周的第一天(至少就 DATEDIFF 而言)是Sunday,而不是周一的 ISO 标准。因此,在计算两个日期之间的周数时,边界是周六/周日。

在您的示例中,2019 年 3 月 16 日和 2019 年 3 月 24 日之间的八天跨越了两个星期的界限(一个在 3 月 16 日,一个在 3 月 24 日),因此生成的 DATEDIFF 值为 2(跨越了两个星期的界限)。

但是,3 月 17 日和 3 月 25 日之间的八天仅跨越一周边界(3 月 23 日/24 日),因此生成的 DATEDIFF 值为 1。

于 2019-03-28T23:23:11.853 回答