Hive cast string到目前为止dd-MM-yyyy

时间:2015-09-09 09:09:40

标签: string date casting hive

如何以#dd-MM-yyyy' dd-MM-yyyy'日期类型的格式也是'dd-MM-yyyy'在Hive?

有些事情:

CAST('12-03-2010' as date 'dd-mm-yyyy')

3 个答案:

答案 0 :(得分:7)

如果我对它的理解正确,则您正在尝试将代表给定日期的String转换为另一种类型。

注意:(如@Samson Scharfrichter所述)

  • 日期的默认表示形式是ISO8601
  • 日期以二进制形式存储(不是字符串)

有几种方法可以做到这一点。而且您已接近解决方案。我将使用CAST(将其转换为DATE_TYPE):

SELECT cast('2018-06-05' as date); 
  

结果:2018-06-05 DATE_TYPE

或(取决于您的模式)

select cast(to_date(from_unixtime(unix_timestamp('05-06-2018', 'dd-MM-yyyy'))) as date)
  

结果:2018-06-05 DATE_TYPE

如果您决定将ISO8601转换为日期类型:

select cast(to_date(from_unixtime(unix_timestamp(regexp_replace('2018-06-05T08:02:59Z', 'T',' ')))) as date);
  

结果:2018-06-05 DATE_TYPE

Hive有其自己的功能,为了说明这些日期和演员功能,我写了一些示例:

日期和时间戳功能示例:

将字符串/时间戳记/日期转换为DATE

SELECT cast(date_format('2018-06-05 15:25:42.23','yyyy-MM-dd') as date); -- 2018-06-05 DATE_TYPE
SELECT cast(date_format(current_date(),'yyyy-MM-dd') as date); -- 2018-06-05 DATE_TYPE
SELECT cast(date_format(current_timestamp(),'yyyy-MM-dd') as date);  -- 2018-06-05 DATE_TYPE

将字符串/时间戳记/日期转换为BIGINT_TYPE

SELECT to_unix_timestamp('2018/06/05 15:25:42.23','yyyy/MM/dd HH:mm:ss'); -- 1528205142 BIGINT_TYPE
SELECT to_unix_timestamp(current_date(),'yyyy/MM/dd HH:mm:ss'); -- 1528205000 BIGINT_TYPE
SELECT to_unix_timestamp(current_timestamp(),'yyyy/MM/dd HH:mm:ss'); -- 1528205142 BIGINT_TYPE

将字符串/时间戳记/日期转换为STRING

SELECT date_format('2018-06-05 15:25:42.23','yyyy-MM-dd'); -- 2018-06-05 STRING_TYPE
SELECT date_format(current_timestamp(),'yyyy-MM-dd'); -- 2018-06-05 STRING_TYPE
SELECT date_format(current_date(),'yyyy-MM-dd'); -- 2018-06-05 STRING_TYPE

将BIGINT unixtime 转换为STRING

SELECT to_date(from_unixtime(unixtime,'yyyy/MM/dd HH:mm:ss')); -- 2018-06-05 STRING_TYPE

将字符串转换为BIGINT unixtime

SELECT unix_timestamp('2018-06-05 15:25:42.23','yyyy-MM-dd') as TIMESTAMP; -- 1528149600 BIGINT_TYPE

将字符串转换为TIMESTAMP

SELECT cast(unix_timestamp('2018-06-05 15:25:42.23','yyyy-MM-dd') as TIMESTAMP); -- 1528149600 TIMESTAMP_TYPE

幂等(字符串->字符串)

SELECT from_unixtime(to_unix_timestamp('2018/06/05 15:25:42.23','yyyy/MM/dd HH:mm:ss')); -- 2018-06-05 15:25:42 STRING_TYPE

幂等(日期->日期)

SELECT cast(current_date() as date); -- 2018-06-26 DATE_TYPE

当前日期/时间戳记

SELECT current_date(); -- 2018-06-26 DATE_TYPE
SELECT current_timestamp(); -- 2018-06-26 14:03:38.285 TIMESTAMP_TYPE

答案 1 :(得分:1)

假设您的表中有一个“ birth_day”列,该列为字符串格式, 您应该使用以下查询来使用birth_day进行过滤

date_Format(birth_day, 'yyyy-MM-dd')

您可以通过以下方式在查询中使用它

select * from yourtable
where 
date_Format(birth_day, 'yyyy-MM-dd') = '2019-04-16';

答案 2 :(得分:0)

这将转换整个列:

select from_unixtime(unix_timestamp(transaction_date,'yyyyMMdd')) from table1