计算两个日期之间的差异时如何使用连续法?

时间:2019-07-31 10:36:45

标签: google-bigquery

我希望能够计算两个日期之间的年数,例如,使用其出生日期和今天的日期来显示一个人的年龄。

我尝试使用标准的SQL DATE_DIFF函数,但这仅允许使用离散方法,而不能使用连续方法。

WITH TestData AS
(
  SELECT 'John Smith' AS Name,
          DATE '1976-08-12' AS DateOfBirth
)

SELECT Name, DateOfBirth, DATE_DIFF(CURRENT_DATE, DateOfBirth, YEAR) as Age
FROM
TestData

我希望本示例的输出为42,但是当前正在输出的是43。

2 个答案:

答案 0 :(得分:0)

时间太长,但可以正常工作

select
    date_diff(current_date, date'1976-08-12', year)
    - cast(date_sub(current_date, interval date_diff(current_date, date'1976-08-12', year) year) < date'1976-08-12' as int64)

答案 1 :(得分:0)

#standardSQL
WITH TestData AS (
  SELECT 'John Smith' AS Name, DATE '1976-08-12' AS DateOfBirth UNION ALL
  SELECT 'Joe the Plumber', '1976-07-12' 
)
SELECT Name, DateOfBirth, 
  IF(DATE_ADD(DateOfBirth, INTERVAL diff YEAR) > CURRENT_DATE(), diff - 1, diff) AS Age
FROM TestData, UNNEST([DATE_DIFF(CURRENT_DATE(), DateOfBirth, YEAR)]) diff  

#standardSQL
CREATE TEMP FUNCTION Age(dob DATE) AS ((
  SELECT diff - IF(DATE_ADD(dob, INTERVAL diff YEAR) > CURRENT_DATE(), 1, 0)
  FROM UNNEST([DATE_DIFF(CURRENT_DATE(), dob, YEAR)]) diff
));
WITH TestData AS (
  SELECT 'John Smith' AS Name, DATE '1976-08-12' AS DateOfBirth UNION ALL
  SELECT 'Joe the Plumber', '1976-07-12' 
)
SELECT Name, DateOfBirth, Age(DateOfBirth) AS Age
FROM TestData       

有结果

Row Name            DateOfBirth     Age  
1   John Smith      1976-08-12      42   
2   Joe the Plumber 1976-07-12      43