在 Google BigQuery 中计算月差
Calculate Month Difference in Google BigQuery
BigQuery 不允许您select DATEDIFF 中的时段 MONTH。
在 BigQuery 中有没有其他方法可以做到这一点。
我可以使用以下但不是月份获得天数差异。
SELECT
OrderID,
OrderDate,
STRING( YEAR ( OrderDate )) + '-' + STRING(MONTH ( OrderDate )) as order_month,
UserID,
FirstOrderDate
DATEDIFF( OrderDate, FirstOrderDate) as date_diff,
FROM [orders.orders]
WHERE FirstOrderDate > DATE_ADD(CURRENT_TIMESTAMP(), -1, 'YEAR')
这个怎么样?
(12 * YEAR(t2) + MONTH(t2)) - (12 * YEAR(t1) + MONTH(t1))
+ IF (DAY(t2) >= DAY(t1), 0, -1)
运行 通过几个示例,它看起来像您想要的:
SELECT
(12 * YEAR(t2) + MONTH(t2)) - (12 * YEAR(t1) + MONTH(t1))
+ IF (DAY(t2) >= DAY(t1), 0, -1)
FROM
(SELECT TIMESTAMP("2010-12-01") as t1, TIMESTAMP("2011-01-01") as t2), // 1
(SELECT TIMESTAMP("2010-12-02") as t1, TIMESTAMP("2011-01-01") as t2), // 0
(SELECT TIMESTAMP("2010-12-01") as t1, TIMESTAMP("2011-12-01") as t2), // 12
(SELECT TIMESTAMP("2010-10-21") as t1, TIMESTAMP("2015-01-10") as t2) // 50
对于标准 SQL,您可以使用 date_diff
:
#StandardSQL
select date_diff(current_date, date '2018-03-06', month)
使用标准 SQL date_diff 可以工作,但是如果您收到一条错误消息“DATE_DIFF 不支持 [n:m] 代码中的 MONTH 日期部分”,那就是因为你的时间戳而不是日期。要解决这个问题,首先将时间戳转换为日期,然后使用 date_diff 函数。
例如:
DATE_DIFF(CAST(OrderDate AS DATE), CAST(FirstOrderDate AS DATE), month) AS DATE_DIF
BigQuery 不允许您select DATEDIFF 中的时段 MONTH。
在 BigQuery 中有没有其他方法可以做到这一点。
我可以使用以下但不是月份获得天数差异。
SELECT
OrderID,
OrderDate,
STRING( YEAR ( OrderDate )) + '-' + STRING(MONTH ( OrderDate )) as order_month,
UserID,
FirstOrderDate
DATEDIFF( OrderDate, FirstOrderDate) as date_diff,
FROM [orders.orders]
WHERE FirstOrderDate > DATE_ADD(CURRENT_TIMESTAMP(), -1, 'YEAR')
这个怎么样?
(12 * YEAR(t2) + MONTH(t2)) - (12 * YEAR(t1) + MONTH(t1))
+ IF (DAY(t2) >= DAY(t1), 0, -1)
运行 通过几个示例,它看起来像您想要的:
SELECT
(12 * YEAR(t2) + MONTH(t2)) - (12 * YEAR(t1) + MONTH(t1))
+ IF (DAY(t2) >= DAY(t1), 0, -1)
FROM
(SELECT TIMESTAMP("2010-12-01") as t1, TIMESTAMP("2011-01-01") as t2), // 1
(SELECT TIMESTAMP("2010-12-02") as t1, TIMESTAMP("2011-01-01") as t2), // 0
(SELECT TIMESTAMP("2010-12-01") as t1, TIMESTAMP("2011-12-01") as t2), // 12
(SELECT TIMESTAMP("2010-10-21") as t1, TIMESTAMP("2015-01-10") as t2) // 50
对于标准 SQL,您可以使用 date_diff
:
#StandardSQL
select date_diff(current_date, date '2018-03-06', month)
使用标准 SQL date_diff 可以工作,但是如果您收到一条错误消息“DATE_DIFF 不支持 [n:m] 代码中的 MONTH 日期部分”,那就是因为你的时间戳而不是日期。要解决这个问题,首先将时间戳转换为日期,然后使用 date_diff 函数。 例如:
DATE_DIFF(CAST(OrderDate AS DATE), CAST(FirstOrderDate AS DATE), month) AS DATE_DIF