所以我想做的是创建一份报告,显示公司每周的销售额。
所以我们有一个名为
created
的时间字段,如下所示:
2016-04-06 20:58:06 UTC
此字段代表销售发生的时间。
现在假设我想创建一个报告,告诉您每周的销售额。所以上面的例子会陷入类似
Week of 2016-04-03
的情况(不必完全这么说,我只是想用最简单的方法来做到这一点)
有人有什么建议吗?我想它涉及使用
UTEC_TO_xxxxxx
函数。
文档建议使用标准 SQL 函数,例如 DATE_TRUNC():
SELECT DATE_TRUNC(DATE '2019-12-25', WEEK) as week;
您可以使用 WEEK() 函数 - 它为您提供周数
SELECT WEEK('2016-04-06 20:58:06 UTC')
如果您需要一周的第一天 - 您可以尝试类似
STRFTIME_UTC_USEC((UTC_USEC_TO_WEEK(TIMESTAMP_TO_USEC(TIMESTAMP('2016-05-02 20:58:06 UTC')), 0)),'%Y-%m-%d')
我必须添加括号:
SELECT DATE_TRUNC(DATE('2016-04-06 20:58:06 UTC'), WEEK) as week;
这是一个相当老的问题,从那以后事情就发生了变化。
就我而言,我发现旧的
WEEK
函数不再被识别,所以我不得不改用 EXTRACT
函数。可以在here找到它的文档。
对我来说,只需从时间戳中提取
ISOWEEK
就足够了,这会导致一年中的第几周(ISOYEAR
)作为数字。
:返回ISOWEEK
的 ISO 8601 周数。datetime_expression
从周一开始。返回值的范围是 [1, 53]。每个 ISO 年的第一个ISOWEEK
开始于公历年第一个星期四之前的星期一。ISOWEEK
所以我这样做了:
SELECT EXTRACT(ISOWEEK FROM created) as week
如果您想查看一周的最后一天,而不是一年中的周数,那么:
SELECT last_day(datetime(created), isoweek) as week