2

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クエリを完了してください

4

2 に答える 2

2

JPQLには日付演算子がありません。SQLでは、次のように記述します。

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

しかし、私が知る限り、JPQLではそれを行うことはできません。BETWEENJPQLでサポートされているので、日付パラメータを使用に変換しaてからb、次を使用します。java.util.Datejava.util.Calendar

SELECT users FROM Users users WHERE user.birthdate BETWEEN :a AND :b
于 2012-10-23T09:41:38.973 に答える
2

演算子を使用して、最初Betweenはに修正します。user.birthdateusers.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ここで参照

于 2012-10-23T09:46:59.133 に答える