在 Google BigQuery 中计算月份差异

tfa*_*yaz 6 google-bigquery

BigQuery 不允许您选择 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')
Run Code Online (Sandbox Code Playgroud)

小智 6

使用标准 SQL,您可以使用date_diff

#StandardSQL
select date_diff(current_date, date '2018-03-06', month)
Run Code Online (Sandbox Code Playgroud)

  • 对于其他收到 @academy- 错误的人,您可能在 date_diff 中使用了时间戳而不是日期 (2认同)

小智 5

使用标准 SQL date_diff 可以工作,但如果您收到错误消息“DATE_DIFF 不支持 [n:m]code 处的月日期部分”,那是因为您的它是时间戳而不是日期。要解决此问题,首先将时间戳转换为日期,然后使用 date_diff 函数。例如:

DATE_DIFF(CAST(OrderDate AS DATE), CAST(FirstOrderDate AS DATE), month) AS DATE_DIF

Run Code Online (Sandbox Code Playgroud)


Jor*_*ani 3

这个怎么样?

(12 * YEAR(t2) + MONTH(t2)) - (12 * YEAR(t1) + MONTH(t1))
    + IF (DAY(t2) >= DAY(t1), 0, -1)
Run Code Online (Sandbox Code Playgroud)

运行几个例子,它看起来像你想要的:

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
Run Code Online (Sandbox Code Playgroud)