5

Oracle DB に次のような列があるとします。

SOMETHING_TS TIMESTAMP WITH TIME ZONE

CriteriaQuery を使用して、この列でフィルタリングしたいと思います。

これを実現するためにネイティブ クエリを使用できます。

    SELECT * 
    FROM SOMETHING
    WHERE TRUNC(SOMETHING_TS) = TO_DATE('2016-12-08','YYYY-MM-DD');

しかし、Java ではそうできませんでした。以下は私のサンプル コードです。

    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<MyClass> cq = cb.createQuery(MyClass.class);
    Date date = new Date();

    predicates.add(cb.equal(cb.function("TRUNC", Date.class, myClass.get("somethingTs")), cb.function("TO_DATE", Date.class, cb.parameter(Date.class, "somethingTs"), cb.literal("YYYY-MM-DD"))));

    Predicate[] predArray = new Predicate[predicates.size()];
    predicates.toArray(predArray);

    cq.where(predArray);

    TypedQuery<MyClass> query = em.createQuery(cq);
    query.setParameter("somethingDt", date);
4

3 に答える 3

13

私の答えを見つけたようです:

predicates.add(cb.equal(cb.function("TRUNC", Date.class, myClass.get("somethingTs")), cb.function("TO_DATE", String.class, cb.parameter(String.class, "somethingTs"), cb.literal("YYYY-MM-DD"))));

次に、パラメーターを設定するときに、日付の文字列形式をクエリに設定します。

ありがとう!

于 2016-12-08T05:21:20.813 に答える