【问题标题】:Calculate AGE from date of birth in REDSHIFT在 REDSHIFT 中根据出生日期计算 AGE
【发布时间】:2023-01-30 21:05:00
【问题描述】:

我尝试了以下但没有一个在红移中工作

datediff(current_date, str_to_date(dob, '%d,-%m-%Y'))/365 as age_today 
year(current_date)-year(dob) as age_in_years

dob 的格式为 1955-03-20 00:00:00.0

【问题讨论】:

  • “它们都不起作用”是什么意思?他们会给出错误,还是只返回错误的结果?

标签: sql amazon-web-services amazon-redshift


【解决方案1】:

请在datediff()函数中提及datepart

datediff(day, dob ,current_date)/365 as age_today 

进一步阅读: Redshift datediff function documentation.

【讨论】:

  • 无效操作:函数 str_to_date(timestamp without time zone, "unknown") 不存在;
  • 我只是从你的问题中复制了那部分。您可以在不使用 str_to_date() 的情况下尝试查询吗
  • 以及如何检查特定日期的年龄,我想知道截至 2022 年 2 月 15 日用户的年龄是多少?
  • datediff(day, dob ,'02/15/2022')/365 as age_at_given_day
  • 如果我除以 365,对于某些考虑闰年的情况,它会不准确,有没有其他方法可以不使用它。
【解决方案2】:

我没有测试过这个,但是怎么样:

datediff(year, dob, current_date + interval '1 year' - interval '1 day') as age

它计算出生日期和一年中的日期之间的年差(减去一天)以计算部分年份。它将处理闰年。

【讨论】:

  • 大多数情况下的年龄不准确。
  • 在哪些情况下不准确?你设法修好了吗?
  • 这个有效(我看起来是 2022 年 2 月 15 日的年龄,但你可以相应地更新):((DATEDIFF(YEAR, a.dob, '02/15/2022') - CASE WHEN '02/15/2022 ' < DATEADD(YEAR, DATEDIFF(YEAR, a.dob,'02/15/2022'), a.dob) THEN 1 ELSE 0 END )) AS age
【解决方案3】:

对于一年中的确切年龄,您可以使用

case
  when ( current_date - (interval '1 year' * date_diff('year', dob, current_date ) ) ) < dob
  then date_diff('year', dob, current_date ) - 1
  else date_diff('year', dob, current_date )
end

【讨论】:

    猜你喜欢
    • 2013-10-31
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 2016-01-28
    相关资源
    最近更新 更多