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

HQL查询PostgreSQL时Time without time zone字段转String方法咨询

解决方案

方案1:HQL层直接格式化(推荐,兼容现有写法)

直接对rf.Duration字段也使用to_char函数指定格式即可,你使用的数据库time without time zone类型原生支持该函数格式化,修改后的查询语句如下:

String queryText = "select new PackageName.MyClass(rf.Name, to_char(rf.StartDateTime,'YYYY/MM/DD HH24:MI:SS'), to_char(rf.Duration,'HH24:MI:SS')) from RecordFile as rf";

to_char指定HH24:MI:SS格式符后,输出结果就是和库中展示一致的00:05:08格式字符串,完全匹配构造函数的String类型参数要求,不需要修改其他代码逻辑。

方案2:Java层手动转换(兜底方案)

如果你的Hibernate方言不支持在HQL中直接对Time类型使用to_char,可以先查询原始类型结果,再手动转换构造实例:

try (Session context = HibernateUtil.getLocalSessionFactory().openSession()) {
    String queryText = "select rf.Name, to_char(rf.StartDateTime,'YYYY/MM/DD HH24:MI:SS'), rf.Duration from RecordFile as rf";
    List<Object[]> rawList = context.createQuery(queryText).list();
    List<MyClass> result = new ArrayList<>();
    for (Object[] row : rawList) {
        String name = (String) row[0];
        String startDateTime = (String) row[1];
        // Time类型默认toString()输出就是HH24:MI:SS格式字符串
        java.sql.Time durationTime = (java.sql.Time) row[2];
        String durationStr = durationTime.toString();
        result.add(new MyClass(name, startDateTime, durationStr));
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:36:05