You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HQL查询获取当年1月1日的实现及现有运行异常问题排查

问题原因

原来的代码运行异常是因为 date_format(current_date,'yyyy-01-01') 输出的是字符串类型,而 to_date(somedate) 输出的是日期类型,部分Hive版本不支持这两种类型直接比较,会触发类型转换异常或者匹配结果不符合预期。

修正方案

推荐使用Hive原生的trunc函数直接获取当年1月1日的日期值,语法更简洁,兼容性也更好:

def foo():
    return " SELECT variables \
        FROM bar \
        WHERE \
        fizz = buzz \
        AND to_date(somedate) > trunc(current_date, 'YY') "

如果想要沿用原来的date_format写法,只需要把生成的字符串显式转成DATE类型即可:

def foo():
    return " SELECT variables \
        FROM bar \
        WHERE \
        fizz = buzz \
        AND to_date(somedate) > to_date(date_format(current_date,'yyyy-01-01')) "

补充说明

  • trunc(date, 'YY')/trunc(date, 'YYYY') 会直接返回输入日期对应年份的1月1日的DATE类型结果,不需要额外做格式转换
  • 涉及日期比较的时候,尽量保证两边的字段类型都是DATE类型,避免隐式转换带来的未知问题

内容的提问来源于stack exchange,提问作者bbweaves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:57:05