Hive 中 TRUNC(DATE) 的替代方法是什么?

What is the alternative of TRUNC(DATE) in Hive?

我有 Oracle SQL 查询它的使用位置 TRUNC(04-Aug-2017 15:35:32) Hive 中将用什么参数来替换 TRUNC?

如果你有时间戳,比如说ts,你可以使用trunc():

trunc(ts, 'day')

这个 returns 一个 timestamp,去掉了时间部分——这类似于 trunc() 在 Oracle 中只给定一个参数时所做的事情。

另一方面,您也可以将时间戳转换为日期:

to_date(ts)

这个returns一个日期而不是一个时间戳:这是一个不同的数据类型,没有时间部分(Oracle没有这样的数据类型:两者datetimestamp存储日期时间)。

假设你有一个date/time,你可以使用to_date()函数:

select to_date(col)

根据 Oracle 文档,TRUNC(日期)函数 returns 日期的时间部分被截断为格式模型 fmt 指定的单位。返回的值始终是数据类型 DATE,即使您为日期指定了不同的日期时间数据类型。如果省略 fmt,则日期将被截断为最近的一天。

Hive中to_date函数的功能类似

它 returns 时间戳字符串的日期部分 (pre-Hive 2.1.0): to_date("1970-01-01 00:00:00") = " 1970-01-01..

如果你想要的是时间戳(午夜时间戳:00:00:00)和截断日期,你需要使用一些转换如下所示:

cast(from_unixtime(unix_timestamp(to_date(<YOU_DATE_COL>), 'yyyy-MM-dd')) as timestamp)