Hive中如何从8位BigInt类型DATE字段提取中间两位月份(无需转字符串)
可以直接实现,无需转换原始DATE字段为字符串
你可以通过整数除法和取模运算直接从BigInt类型的8位日期中提取月份,不需要先将DATE字段转为字符串。以下分两种场景给出实现方式:
场景1:获取数字形式的月份(如1、12)
直接使用数学运算提取:
SELECT (date_val / 100) % 100 AS month_number FROM your_hive_table;
运算逻辑:
date_val / 100:对8位数字做整数除法,去掉最后两位日部分,得到前6位(例如20220120→202201)% 100:对前6位取模100,得到中间两位的数字值(202201→1)
场景2:获取两位字符串格式的月份(如01、12)
如果需要保留两位数的格式,仅需将运算后的数字结果转为字符串并补零即可,原始DATE字段仍保持BigInt类型:
SELECT lpad(CAST((date_val / 100) % 100 AS STRING), 2, '0') AS month_string FROM your_hive_table;
逻辑补充:
CAST(...) AS STRING:将提取到的数字月份转为字符串lpad(..., 2, '0'):给不足两位的月份补前导零,确保输出为两位格式
内容的提问来源于stack exchange,提问作者Catanzaro
相关产品推荐
相关产品推荐

