【问题标题】:How can I get the number of days from specific date to CURRENT_DATE()如何获取从特定日期到 CURRENT_DATE() 的天数
【发布时间】:2020-10-27 19:11:49
【问题描述】:

我在 Hive 上的 Teradata SQL 助手中运行了一些查询 - 我只想选择 18 岁以上的人。 我在 Person_table 列中的 date_of_birth 格式为 24/02/2000

这是我的查询:

从 Person_table 中选择名称作为名称,其中 (CURRENT_DATE() - date_of_birth) / 365 > 18

我做错了什么?我没有找到这类工作示例。

更新:我的错 - 是 HIVE,不得不在问题中承认这一点

【问题讨论】:

  • 您是遇到错误还是不是预期的结果?

标签: sql hive teradata


【解决方案1】:

将您的逻辑更改为:

where date_of_birth <= add_months(CURRENT_DATE, -18*12)

这假定date_of_birth 实际上是一个日期,如果它是一个字符串,你必须先转换它:

where to_date(date_of_birth, 'dd/mm/yyyy') <= add_months(CURRENT_DATE, -18*12)

【讨论】:

    【解决方案2】:

    选择名称作为名称 来自 Person_table 其中 DATEDIFF(CURRENT_DATE(), date_of_birth) /365.25 >18

    成功了。

    【讨论】:

    • DATEDIFF 不是有效的 Teradata SQL 函数。可能是 UDF,如果它是 SQL UDF,它是您初始计算的包装器。顺便说一句,我的逻辑更有效,因为不涉及计算:-)
    • @dnoeth,OP 更新了问题。是 Hive,不是 Teradata。
    • 我在 Hive 上的 Teradata SQL 助手中
    【解决方案3】:

    尝试使用INTERVAL,例如:

    select name as name 
    from Person_table 
    where CURRENT_DATE - date_of_birth INTERVAL YEAR(4) >= 18
    

    我没有要测试的TD 系统,但这是一般方法。试试看,让我知道。

    【讨论】:

    • 没用。解析异常 - 无法识别 'INTERVAL' '"YEAR"' 附近的输入
    • 正确的语法是where CURRENT_DATE - date_of_birth INTERVAL YEAR(4) &gt;= 18,但这不会按预期工作,因为它不是基于月/日,而是仅基于年。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多