1
select * from xyz where  to_char(sdateAndTime,'DD-MM-YYYY')=(select max( to_char(sdateAndTime,'DD-MM-YYYY')) as dt from xyz))

sdateAndTime is timestamp field in oracle db. i am interested to fetch record for that given date and not in hh:mm:ss:zzzz AM/PM.

Trying to build criteria for it but :(

CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<XYZ> criteria = builder.createQuery(XYZ.class);
Root<XYZ> root = criteria.from(XYZ.class);
criteria.select(root);
Subquery<XYZ> sub = criteria.subquery(XYZ.class);
Root subRoot = sub.from(XYZ.class);
sub.select(builder.max(subRoot.get("sdateAndTime")));
criteria.select(root).where(builder.in(root.get("sdateAndTime")).value(sub);
entityManager.createQuery(criteria);

私は dd:hh:mm:ss の抽出最大値に到達できましたが、 to_char(sdateAndTime,'DD-MM-YYYY') に相当するものを取得できませんでした

入力をいただければ幸いです。ありがとう

4

2 に答える 2

1

ジェームスさん、ご意見ありがとうございます...!!

目的の結果を得るために、上記の条件クエリを以下の変更で修正しました。

Subquery<String> sub = criteria.subquery(String.class);
        Root subRoot = sub.from(XYZ.class);
        sub.select(builder.substring(builder.greatest(builder.function("TO_CHAR", String.class, subRoot.get("sdateAndTime"))),0,10));
        criteria.select(root).where(
                builder.equal(builder.substring(builder.function("TO_CHAR", String.class, root.get("sdateAndTime")),0,10),sub)

注: DD-MM-YYYY をパラメーターとして渡すことができなかったため、回避策として部分文字列を使用しました。より良い解決策をいただければ幸いです。

于 2013-09-21T00:08:16.983 に答える