【问题标题】:How to calculate exact number of years between two dates如何计算两个日期之间的确切年数
【发布时间】: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 所暗示的那样,如果“确切的年数”表示整数,则可能与TRUNCCEILINGROUND 一起使用MONTHS_BETWEEN(...)/12。如果您需要调整 +/- 一年,最好使用 ADD_MONTHS 来增加或减少 12 个月(由于闰年的复杂性)。
  • 一些想法here?
  • 非闰年 2 月 29 日和 2 月 28 日出生的用户的“确切年数”是多少?

标签: sql teradata teradata-sql-assistant


【解决方案1】:

尝试下面的 SQL QUERY 使用 DATEDIFF 函数查找两个日期之间的年份差异。

SELECT DATEDIFF(year, Brth_Dt, Pub_Dt) AS date_difference 来自员工;

【讨论】:

    【解决方案2】:

    Teradata 不支持 DATEDIFF、DATEADD 函数。

    这是计算当前日期年龄的一种方法。我们使用 Teradata 的 EXTRACT 函数将日期转换为 YYYYMMDD 格式的整数,以提取日期部分;然后我们只需从当前日期中减去 DOB。

    您可以将 CURRENT_DATE 替换为 Publish_Date 并将 DOB 替换为 Birth_Date。

     ((EXTRACT(YEAR FROM CURRENT_DATE)*10000+
       EXTRACT(MONTH FROM CURRENT_DATE)*100+
       EXTRACT(DAY FROM CURRENT_DATE)) -
      (EXTRACT(YEAR FROM DOB)*10000+
       EXTRACT(MONTH FROM DOB)*100+
       EXTRACT(DAY FROM DOB))
     )/10000 as Age
    

    【讨论】:

    • 获取整数 yyyymmdd 的另一种方法:CAST(theDate AS INTEGER)+19000000
    猜你喜欢
    • 2018-03-04
    • 2012-01-06
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 2018-11-18
    相关资源
    最近更新 更多