我希望能够计算两个日期之间的年数,例如,使用其出生日期和今天的日期来显示一个人的年龄。
我尝试使用标准的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。
答案 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