如何将“2018-03-31”这样的日期转换为 bigint 在 Hive ?
bigint
Hive
0s0u357o1#
戈登说了什么。如果您有javascript时间戳,请记住它们只是自 1970-01-01T00:00:00.000Z 在64位浮点中。它们可以很容易地转换成bigint。如果你把时间戳存储在 DATETIME(3) 或者 TIMESTAMP(3) 数据类型,使用 UNIX_TIMESTAMP(date)*1000 获取有用的bigint毫秒值。如果你只关心日期(而不是时间),你可以使用 TO_DAYS() 获取自 0000-01-01 (一)公历;如果你是一个古代历史学家,并且关心儒略历法,这种方法就有问题。如果你不知道我在说什么,你不必担心。)但是int对于这些日数就足够了;bigint太过分了。
1970-01-01T00:00:00.000Z
DATETIME(3)
TIMESTAMP(3)
UNIX_TIMESTAMP(date)*1000
TO_DAYS()
0000-01-01
piv4azn72#
你可以用 unix_timestamp 函数,该函数将日期或时间戳转换为unix时间戳并作为 bigint .查询示例:
unix_timestamp
select unix_timestamp('2018-03-31', 'yyyy-MM-dd');
输出:
+--------------------------------------+|unix_timestamp(2018-03-31, yyyy-MM-dd)|+--------------------------------------+| 1522434600|+--------------------------------------+
+--------------------------------------+
|unix_timestamp(2018-03-31, yyyy-MM-dd)|
| 1522434600|
注意:在Hive1.2.0中测试了此代码
dw1jzc5e3#
你可以做:
select year(date) * 10000 + month(date) * 100 + day(date)
这将生成一个表示日期的整数。如果需要unix时间戳(自1970-01-01起的秒数),则:
select unix_timestamp(date)
3条答案
按热度按时间0s0u357o1#
戈登说了什么。
如果您有javascript时间戳,请记住它们只是自
1970-01-01T00:00:00.000Z
在64位浮点中。它们可以很容易地转换成bigint。如果你把时间戳存储在DATETIME(3)
或者TIMESTAMP(3)
数据类型,使用UNIX_TIMESTAMP(date)*1000
获取有用的bigint毫秒值。如果你只关心日期(而不是时间),你可以使用
TO_DAYS()
获取自0000-01-01
(一)公历;如果你是一个古代历史学家,并且关心儒略历法,这种方法就有问题。如果你不知道我在说什么,你不必担心。)但是int对于这些日数就足够了;bigint太过分了。piv4azn72#
你可以用
unix_timestamp
函数,该函数将日期或时间戳转换为unix时间戳并作为bigint
.查询示例:
输出:
注意:在Hive1.2.0中测试了此代码
dw1jzc5e3#
你可以做:
这将生成一个表示日期的整数。
如果需要unix时间戳(自1970-01-01起的秒数),则: