首页 > 解决方案 > 在日期函数之间组合字符串后获取 NULL

问题描述

给定一个带值的日期列2020-05-01,我想返回2020-Q2。由于我们使用的 Hive 版本,该QUARTER()功能不可用。

我可以通过以下方式获得季度数:(INT((MONTH(yyyy_mm_dd)-1)/3)+1)。当我尝试将它与YEAR()函数和字符串结合起来时,我得到null

year(yyyy_mm_dd)+"-"+"Q"+(INT((MONTH(yyyy_mm_dd)-1)/3)+1) as time_frame

如何正确连接它以获得所需的空字符串?


使用此查询:

select
    yyyy_mm_dd,
    year(yyyy_mm_dd) 
        || '-Q' 
        || INT((MONTH(yyyy_mm_dd)-1)/3) + 1 as time_frame
from
    schema.table1
where
    yyyy_mm_dd = '2019-01-01'
limit 1

引发此错误:

编译语句时出错:失败:ParseException 第 4:9 行无法识别“|”附近的输入 ''-Q'' '|' 在表达式规范中

标签: sqlstringdatetimehivehiveql

解决方案


不要+用于字符串连接 - 只有 SQL Server 支持这一点。在 Hive 中,您可以使用标准运算符||

year(yyyy_mm_dd)
    || '-Q' 
    || INT((MONTH(yyyy_mm_dd)-1)/3) + 1 as time_frame

推荐阅读