我需要使用小于1.3的配置单元版本从字符串字段获取季度,因此不能使用季度特性
字符串字段中的示例数据格式是--20210415
我试着用 CONCAT('T',(INT((MONTH(from_unixtime(unix_timestamp(,'yyyymmdd')))-1)/3)+1))
但它显示的是t1,而应该显示t2(因为四月在第二季度20210415),但这个表达式在计算季度之前不会将字符串转换为日期
所以,我用铸造法把它改成了日期 cast(to_date(from_unixtime(unix_timestamp(date, 'yyyymmdd'))) as date)
它转换了,但产量是2021年1月15日和相同的转换为季度使用 CONCAT('T',(INT((MONTH(cast(to_date(from_unixtime(unix_timestamp(qc_creation_date, 'yyyymmdd'))) as date))-1)/3)+1))
有没有办法解决这个问题,比如在for ex:string 20210415中,输出应该是t2。请帮忙
当做
2条答案
按热度按时间lnlaulya1#
我找到解决办法了
CONCAT('Q',(INT((MONTH(cast(to_date(from_unixtime(unix_timestamp(, 'yyyyMMdd'))) as date))-1)/3)+1))
谢谢41ik7eoe2#
您的日期格式
yyyyMMdd
可以有效地转换为配置单元格式yyyy-MM-dd
使用regexp_replace
函数而不是unix_timestamp
+from_unixtime
使用SimpleDataFormat的函数。查询中的错误是错误的格式模板,它应该是'yyyymmdd',请参阅simpledateformat。但是regexp\u替换要简单得多,使用unix_timestamp
+from_unixtime
仅在无法使用regexp\u replace执行相同操作时。不需要铸造它的日期,字符串工程罚款。
对于Hive<
1.3.0
提取月份并使用ceil(month/3.0)
:更简单的方法:
自从Hive1.3.0以来
quarter(date/timestamp/string)
功能。演示: