【问题标题】:Compare timestamp date in Postgresql in java比较Java中Postgresql中的时间戳日期
【发布时间】:2012-10-23 09:38:30
【问题描述】:

我正在使用 PostgreSQL 数据库和 JPA。这是我的用户表

   CREATE TABLE users
        (
          id integer NOT NULL DEFAULT nextval('userseq'::regclass),
          firstname character varying(64) ,
          middlename character varying(64),
          lastname character varying(64),
          birthdate timestamp with time zone,
         )

    Query query = em
                    .createQuery(
    "SELECT users FROM Users users WHERE user.birthdate =:a")
                            .setParameter("a",18)
                            .setParameter("b",25);
            query.getResultList();

我想获取所有年龄在 18-25 岁之间的用户。请完成我上面的 JPA 查询

【问题讨论】:

  • 您不需要转换现有的timestamp 的DB。请修改答案。

标签: java postgresql jpa


【解决方案1】:

使用Between操作符,先把user.birthdate改成users.birthdate

    Calendar cal_1 = Calendar.getInstance();
    cal_1.add(Calendar.YEAR, -18);
    Date a = cal_1.getTime();
    Calendar cal_2 = Calendar.getInstance();
    cal_2.add(Calendar.YEAR, -25);
    Date b = cal_2.getTime();

    query.setParameter("a", a);
    query.setParameter("b", b);

    SELECT users FROM Users users WHERE users.eventsDate BETWEEN :a AND :b

例如:x BETWEEN :min AND :max。参考here

【讨论】:

    【解决方案2】:

    JPQL 缺少日期运算符。在 SQL 中,您会编写如下内容:

    SELECT age(TIMESTAMPTZ '1999-01-01') BETWEEN INTERVAL '18' YEAR AND INTERVAL '25' YEAR;
    

    但据我所知,您不能在 JPQL 中这样做。 BETWEEN is supported in JPQL,所以我会使用java.util.Calendar 将日期参数ab 转换为java.util.Date,然后使用:

    SELECT users FROM Users users WHERE user.birthdate BETWEEN :a AND :b
    

    【讨论】:

      猜你喜欢
      • 2013-03-02
      • 2012-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多