【问题标题】:What is the equivalent of ORACLE's SYSDATE in Impala?什么是 Impala 中 ORACLE 的 SYSDATE 的等价物?
【发布时间】:2014-07-04 14:07:12
【问题描述】:

我有一个 WHERE 子句,我正在尝试将 ORACLE SQL 转换为 Impala SQL。 col2 输出看起来像 201406。我需要让 Impala 可读,然后对其进行格式化,然后将其转换为字符串。任何帮助将不胜感激!

WHERE Table1.col2 <= to_char( SYSDATE-7, 'YYYYMM')

【问题讨论】:

  • ANSI 标准是CURRENT_TIMESTAMP。也许您的数据库支持该标准。
  • 谢谢。那么如何以 YYYYMM 格式设置当前时间戳?然后再减去 7 个月
  • 查看手册:格式化格式化函数应该记录在案。要执行“减号”,您可以在标准 SQL 中执行 current_timestamp - interval '7' month
  • @DavidFaber - current_timestamp()date_sub() 解决了一半的问题。但是要匹配“YYYYMM”格式会更难。

标签: sql oracle impala sysdate


【解决方案1】:

current_timestamp() 是 now() 的别名,因此可以使用其中任何一个来代替 sysdate

SYSDATE-7 是 sysdate 减去 7 天,所以相当于 WHERE Table1.col2 &lt;= to_char( SYSDATE-7, 'YYYYMM')

WHERE Table1.col2 <= concat( cast(year(to_date( days_add(current_timestamp(),-7 ))) as string), cast(month(to_date( days_add(current_timestamp(),-7 ) )) )

或者如果扣除额是 7 个月,那么:

concat( cast(year(to_date( months_add(current_timestamp(),-7 ))) as string), cast(month(to_date( months_add(current_timestamp(),-7 ) )) )

注意,所有都未经测试,我使用 days_add() 或 months_add() 因为许多人更喜欢使用负 7 而不是正 7 的 days_sub()。但是我假设这会起作用(这个在具有类似日期算术功能的 MySQL 中工作)。

还请注意,这暗示您的字段 Table1.col2 是字符串类型,如果它是整数,则需要稍微不同的解决方案。

year( months_add(current_timestamp(),-7 ) ) * 100 + month(days_add(current_timestamp(),-7 ))

year( months_add(current_timestamp(),-7 ) ) * 100 + month(months_add(current_timestamp(),-7 ))

【讨论】:

  • 这看起来应该可以工作,因为正如您所说,功能或多或少与 Mysql 相同。它还对我不起作用,但我已经用 impala 1.1.3 提出了一个非常长的 hack/gross sql 代码
  • 是的,它看起来会很长而且很粗糙,抱歉,我无法测试它,所以我不确定如何进一步提供帮助
【解决方案2】:

使用以下语法:

select from_unixtime(unix_timestamp(now()), 'yyyy-MM-dd')

【讨论】:

    猜你喜欢
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 2010-12-01
    • 2016-06-05
    • 1970-01-01
    • 2012-10-03
    相关资源
    最近更新 更多