【发布时间】:2022-01-14 00:06:25
【问题描述】:
我有两列,Birth_Date 和 Publish_Date。我需要计算 Publish_Date 和 Birth_Date 之间的年数(考虑月份)。 (日期,格式'YYYYMMDD')
我曾尝试使用 DATEDIFF,但它似乎没有解决这个问题。来自这里的解决方案:How to calculate age (in years) based on Date of Birth and getDate()
, CASE WHEN dateadd(year, datediff (year, Brth_Dt, Pub_Dt), Brth_Dt) > Pub_Dt
THEN datediff(year, Brth_Dt, Pub_Dt) - 1
ELSE datediff(year, Brth_Dt, Pub_Dt)
END as Brth_Yrs
错误:选择失败。 3706: 语法错误:预期在 '(' 和 'year' 关键字之间。
也从How to calculate Age/Number of Years between two dates尝试过这个解决方案
, DATEDIFF(YEAR, Brth_Dt, Pub_dt) +
CASE
WHEN MONTH(@Pub_dt) < MONTH(Brth_Dt) THEN -1
WHEN MONTH(@Pub_dt) > MONTH(Brth_Dt) THEN 0
ELSE
CASE WHEN DAY(@Pub_dt) < DAY(Brth_Dt) THEN -1 ELSE 0 END
END) As Brth_Yrs
错误:选择失败。 3706: 语法错误:预期在 '(' 和 'YEAR' 关键字之间。
谁能帮忙写这个?
【问题讨论】:
-
如果已为您的 Teradata 实例启用嵌入式服务系统功能,则以下信息应为您提供一些四舍五入后所需的信息 - docs.teradata.com/r/kmuOwjp1zEYg98JsB8fu_A/… - 此文档也可能有所帮助,尽管它不是明确您是否可以在整个列上实现该功能 - docs.teradata.com/r/1DcoER_KpnGTfgPinRAFUw/… - 否则,为了从 Teradata 中的数据中获取数月,您可以查看 Extract 函数
-
您收到这些错误是因为 Teradata 不支持 dateadd 和 datediff 函数。
-
正如@procopypaster 所暗示的那样,如果“确切的年数”表示整数,则可能与
TRUNC或CEILING或ROUND一起使用MONTHS_BETWEEN(...)/12。如果您需要调整 +/- 一年,最好使用ADD_MONTHS来增加或减少 12 个月(由于闰年的复杂性)。 -
一些想法here?
-
非闰年 2 月 29 日和 2 月 28 日出生的用户的“确切年数”是多少?
标签: sql teradata teradata-sql-assistant