【问题标题】:select specific date format in jpa criteria query在 jpa 条件查询中选择特定的日期格式
【发布时间】:2014-04-02 07:11:52
【问题描述】:

我想在 jpa 条件查询的多选中选择特定格式的日期 就像我们使用

从事务 tn 中选择 to_char(tn.dbdate,'yyyy-MM-dd') 
在甲骨文中。

我可以使用

query.multiselect(cb.function("TO_CHAR",String.class,transaction.get("dbdate")) );

但这会以数据库格式返回日期,即

Wed Apr 2 12:20:50 2014

但是如何以特定的日期格式获取它

'yyyy-MM-dd'

【问题讨论】:

    标签: date jpa criteria-api


    【解决方案1】:

    在当前查询中,没有将格式作为 TO_CHAR 函数的参数给出。这就是为什么它只能退回到默认状态。如documented,也可以通过 CriteriaBuilder.function 将多个参数传递给数据库函数:

    query.multiselect(
        cb.function("TO_CHAR",
                    String.class,transaction.get("dbdate"), 
                    cb.literal("yyyy-MM-dd")));
    

    【讨论】:

    • 谢谢,但我试过这个。它显示 cb.function() 方法的编译错误。应该有一些表达式而不是字符串 ('yyyy-MM-dd')。
    • 对,cb.literal 应该被用来作为 Expression 的格式。
    • 非常感谢... cb.literal() 解决了我的问题。它现在可以工作了:)
    • 对我不起作用..出现 NameError 错误:参数没有方法“函数”(org.jruby.RubyString,org.jruby.Ru byClass,org.hibernate.ejb.criteria.path。 SingularAttributePath,org.hibernate.ejb.criteria.expression.LiteralExpression) on Java::OrgHibernateEjbCriteria::Criteri aBuilderImpl
    • 代替“yyyy-MM-dd”试试“%Y-%m-%d”。参考stackoverflow.com/questions/33153144/…
    【解决方案2】:

    您可以从 DB 中获取日期并在以后根据需要对其进行格式化。

    【讨论】:

    • 不,我没有使用自定义类,即我需要直接显示为从数据库中获取。所以只需要在查询中格式化
    • 您可以使用生成 to_char(tn.dbdate,'yyyy-MM-dd') 的本机查询吗?
    • 是的,我可以,但这不是解决方案。在 JPA 标准或 JPQL 中需要解决方案
    【解决方案3】:

    这对我有用:

    Expression<String> dateStringExpr = cb.function("to_char", String.class,
            root.get("effectiveStartDate"), cb.literal("YYYY-MM-DD HH12:MI:SS"));
    
    ls.add(cb.like(cb.lower(dateStringExpr), "%" + effectiveStartDate.get().toLowerCase() + "%"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      • 1970-01-01
      • 2015-05-26
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      • 2023-01-21
      相关资源
      最近更新 更多