当前位置: 首页 > 面试题库 >

CriteriaQuery月和年过滤器

程墨竹
2023-03-14
问题内容

我正在尝试在一个包含带有日期的列(Oracle 11G)的模型中进行标准查询(JPA / Hibernate)。例如,我有

  1. 09年1月13日
  2. 09年1月15日
  3. 09年3月16日

我的功能就像:

public MyEntity getEntitiesFromCertainFilters(int a, int b, java.util.date c)
{
    CriteriaBuilder builder = entityManager.getCriteriaBuilder();
    CriteriaQuery< MyEntity > query = builder.createQuery(MyEntity.class);
    Root< MyEntity > root = query.from(MyEntity.class);

    query.select(root).where (
        builder.equal ( root.get ( "id" ).get ( "codEstablec" ) , establecimiento),
        builder.equal ( root.get ( "id" ).get ( "correlGrupo" ) , correlGrupo),
        //HERE I NEED TO ADD FILTER BY C.MONTH AND C.YEAR FROM THE DATE ATTRIBUTE
        );

    List < MyEntity > resultList = entityManager.createQuery(query).getResultList();  
    return resultList.get(0);
}

如果我想按c =“ 01-JAN-09”进行过滤,则应返回:

  1. 09年1月13日
  2. 09年1月15日

任何帮助将不胜感激,在此先感谢。


问题答案:

您可以使用builder.function方法。例如

query.select(root).where (
    builder.equal ( root.get ( "id" ).get ( "codEstablec" ) , establecimiento),
    builder.equal ( root.get ( "id" ).get ( "correlGrupo" ) , correlGrupo),
    builder.equal(builder.function("YEAR", Integer.class, root.get("DATE_FIELD") ), C.YEAR),
    builder.equal(builder.function("MONTH", Integer.class, root.get("DATE_FIELD")), C.MONTH) 
    );


 类似资料:
  • 问题内容: 我的表格显示了各个国家/地区进行的搜索量以及进行搜索的日期,我想要一个查询来向我显示2012年和2013年每个月的搜索量,我需要为月份添加单独的列,年份和搜索次数。我以前使用过下面的查询,该查询返回每周进行的搜索量,但我想将其更改为仅2012和2013年每月进行的搜索。 问题答案: 只需使用MONTH()和YEAR()函数

  • 问题内容: 我正在尝试转换这样的时间戳: 自格式以来的某个时间,因此它会像9个月前1天2小时30分钟2秒。 这样的东西。 我用过并达到以下目的: 但是我该如何转换呢?我是这样想的: 但这是一个问题,因为几个月可能会有28、30和31天,所以几个月不会准确。 有没有实现我想要的更好的方法? 问题答案: 前言: 我在中发布了此实用程序,请参见。 就像一年中的日子(le年)一样,一个月中的日子取决于日期

  • 2019 年 5 月和 6 月发布的 Adobe XD。 有关 Adobe XD 早期版本中推出的功能摘要,请参阅功能摘要 | 早期版本。 Adobe XD 是一款用于设计 Web 和移动应用程序用户体验以及为其构建原型的基于矢量的工具。轻松地在线框、视觉设计、交互设计、原型构建、预览和共享功能间进行切换 — 均可在一个功能强大的工具中实现。 XD 适合所有类型的创作者 — UX/UI 设计人员、

  • 问题内容: 有人可以向我解释为什么以下过滤器在月份和日期级别不起作用吗?按年份进行过滤似乎有效,但其他两个方法却无效。 快速更新以演示在创建和处理查询集之前我得到了相同的行为: 这里有更多值得深思的地方: 问题答案: Django文档给出了将时区定义安装到数据库的指令: SQLite:安装-转换实际上是在Python中执行的。 PostgreSQL:无要求(请参阅时区)。 Oracle:无要求(请

  • 例子: 例如:String str=“11/20”(MM/yy)希望通过在Java中以上述格式传递字符串来获取月份名称和年份(例如:11月/20)

  • 问题内容: 给定一个在每行上都带有时间戳的表,您将如何格式化查询以适合此特定的json对象格式。 我正在尝试将json对象组织成年/月。 json以查询为基础: 这是我到目前为止的查询- 该查询正在分解,因为它(可预测地)将不同年份组合在一起。 问题答案: 是你想要的。