【问题标题】:Calculating age in Teradara在 Teradata 中计算年龄
【发布时间】:2014-11-16 18:55:32
【问题描述】:

我有这个来计算 Teradata 中一个人的年龄:

select (extract(year from current_date) - extract(year from BIRTH_DATE) (named YEARS)) + case when current_date - (YEARS (interval year))

但是,所有出生日期都是十进制的,例如 17.773824。如何将其转换为正确的日期并从中提取像上面代码中的年份? CONVERT 之类的 SQL 函数是否有效?

非常感谢。

【问题讨论】:

  • 17.773824 应该是什么日期?它是如何计算的?
  • 嗨,dnoeth,17.773824 是小数。它应该是通过从当前(系统)时间中减去一个人的生日来计算的。昨天我能够为它提出一个解决方案:“选择 cast(cast((birth_date_dim_ck - 19000000) as int) as date) 作为 DOB,(current_date - DOB) year as Age”。显然 19000000 是 Teradata 在内部存储日期的方式,我们必须使用“as int”将值转换为整数,因为在这种情况下,Teradata 似乎不能很好地消化小数。非常感谢。
  • 如果您找到了可行的解决方案,请将其作为答案发布并接受该答案作为正确答案。这可能有助于其他人在类似问题上寻求帮助。
  • 你是对的,异种恶魔!我将把我的解决方案放在下面。它还考虑了月份和日期,即精确计算您的年龄。它可能又长又丑,但它有效:)
  • cast(cast((birth_date - 19000000) as int)as date) as DOB, extract (year from current_date) - extract (year from DOB) + case when extract (month from current_date)

标签: date datetime teradata


【解决方案1】:

这里有一个稍微不同的方法。

select
cast((cast(date as int) - cast(BIRTH_DATE as int))/ 10000 as int) as AGE

【讨论】:

  • 谢谢你的回答,布赖恩。我很感激!
  • 这对我有用,但我必须双投手动输入的日期,例如cast(cast('2021-07-31' as date) as int)
猜你喜欢
  • 1970-01-01
  • 2017-05-26
  • 2017-08-08
  • 2012-03-26
  • 1970-01-01
  • 2020-12-28
  • 2016-03-20
  • 2011-04-16
  • 1970-01-01
相关资源
最近更新 更多