场景:要求8位格式日期+8天后仍显示8位格式日期
问题点:date_add()函数不支持8位格式日期,只识别10位格式日期(%Y-%m-%d)
方法一:用unix_timestamp(string date, string pattern)转换成时间戳后再用from_unixtime(bigint unixtime, string format)转换成10位格式日期后用date_add()进行加减天数,之后还需要转换成时间戳再转换成8位格式日期时间,如此太过麻烦。
方法二:可以通过将8位格式日期和天数都要转换成时间戳进行加减运算后再转换成8位格式日期。
举例:
hive> select form_unixtime(cast(unix_timestamp('20181112','yyyyMMdd') + 8 * 86400 as bigint),'yyyyMMdd') from dual;
注意:unix_timestamp(‘20181112’,‘yyyyMMdd’) + 8 * 86400结果为double类型,而from_unixtime(bigint unixtime, string format)要求时间戳为bigint类型,需要用cast()进行格式转换。