【发布时间】: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)