我的表中有两个TIMESTAMP列:customer_birthday和purchase_date。我想创建一个查询来显示按客户年龄购买的数量,以创建图表。
但是如何使用BigQuery计算年龄?换句话说,我如何获得两个TIMESTAMP之间的年份差异?由于闰年,无法使用天或小时计算年龄,因此函数DATEDIFF(<timestamp1>,<timestamp2>)
不合适。
感谢。
答案 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
);