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没有这样的数据类型:两者date
和timestamp
存储日期和时间)。
假设你有一个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)
我有 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没有这样的数据类型:两者date
和timestamp
存储日期和时间)。
假设你有一个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)