如何在BigQuery中计算年龄?

时间:2014-10-18 17:55:25

标签: google-bigquery

我的表中有两个TIMESTAMP列:customer_birthday和purchase_date。我想创建一个查询来显示按客户年龄购买的数量,以创建图表。

但是如何使用BigQuery计算年龄?换句话说,我如何获得两个TIMESTAMP之间的年份差异?由于闰年,无法使用天或小时计算年龄,因此函数DATEDIFF(<timestamp1>,<timestamp2>)不合适。

感谢。

4 个答案:

答案 0 :(得分:2)

关于日期之间的区别 - 您可以考虑用户定义的函数(https://cloud.google.com/bigquery/user-defined-functions)和JavaScript日期库,例如Datejs或Moment.js

答案 1 :(得分:0)

您可以计算所有年份为365天的天数,取差值,然后除以365.例如:

SELECT (day2-day1)/365 
FROM (
  SELECT YEAR(t1) * 365 + DAYOFYEAR(t1) as day1,
         YEAR(t2) * 365 + DAYOFYEAR(t2) as day2 
  FROM (
    SELECT TIMESTAMP('20000201') as t1, 
           TIMESTAMP('20140201') as t2))

即使有闰年,也会返回14.0。如果您希望最终结果为整数而不是浮点数,则可以使用INTEGER()函数来转换结果。

请注意,如果其中一个日期是闰日(2月29日),它将显示距离3月1日一年,但我认为这听起来像预期的行为。

答案 2 :(得分:0)

您可以使用DATE_DIFF来获取年份差异,但如果今年尚未生日,则需要减1:

IF(EXTRACT(DAYOFYEAR FROM CURRENT_DATE) < EXTRACT(DAYOFYEAR FROM birthdate),
  DATE_DIFF(CURRENT_DATE, birthdate, YEAR) - 1,
  DATE_DIFF(CURRENT_DATE, birthdate, YEAR)) AS age

答案 3 :(得分:0)

它在用户定义的函数中:

CREATE TEMP FUNCTION calculateAge(birthdate DATE) AS (
  DATE_DIFF(CURRENT_DATE, birthdate, YEAR) + 
  IF(EXTRACT(DAYOFYEAR FROM CURRENT_DATE) < EXTRACT(DAYOFYEAR FROM birthdate), -1, 0) -- subtract 1 if bithdate has not yet occured this year
);