0

我有以下查询:

SELECT DISTINCT * 
FROM Projekt p
WHERE p.bewilligungsdatum = to_date('01-07-2000', 'dd-mm-yyyy')

但我在建立条件方面遇到了问题。这是我的代码:

condition = criteriaBuilder.equal((Expression<String>) projekt.get(criterion), "to_date('" + projektSearchField + "', 'dd-mm-yyyy')");

这会产生以下内容:

SELECT  DISTINCT * 
FROM Projekt p 
WHERE p.bewilligungsdatum = 'to_date('01-07-2000', 'dd-mm-yyyy')'

并且 ufcorse 不起作用。我应该使用哪种方法进行日期比较(或如何删除'模式部分中的外部字符)?

4

4 回答 4

0

你为什么不尝试使用这样的参数。然后您可以在 java 中进行 String->Date 转换并将一个实数传递java.util.Date给数据库。

EntityManager em; // initialized somewhere
Date datum; // initialized somewhere

...

String queryString = "SELECT p " 
             + "FROM Projekt p"
             + "WHERE p.bewilligungsdatum = :datum";

Query query = em.createQuery(queryString)

query.setParameter("datum", datum);

List<Projekt> projekte = query.getResultList();

这是保持数据库独立的方式,因为您没有使用特定to_date功能

viele Grüße aus Bremen ;o)

于 2011-07-13T08:24:13.753 回答
0

对不起。我想到了冬眠CriteriaQuery

然后尝试通过CriteriaBuilder类似的东西

Date datum; // initialized somewhere

...

final CriteriaQuery<Projekt> query = criteriaBuilder.createQuery(Projekt.class);
final Root<Projekt> projekt = query.from(Projekt.class);

Predicate condition = criteriaBuilder.equals(projekt.get("bewilligungsdatum"),datum);
query.where(condition)

这个我没用过,自己试试

于 2011-07-13T08:58:11.360 回答
0

这也应该起作用,通过将日期作为限制的参数传递

Date datum; // initialized somewhere

CriteriaQuery query = ...

query.add(Restrictions.eq( "bewilligungsdatum ", datum );

...
于 2011-07-13T08:36:24.170 回答
0

您可以使用https://openhms.sourceforge.io/sqlbuilder/ ,然后使用 Condition


Object value1 = hire_date
Object value2 = new CustomObj("to_date('2018-12-01 00:00:00','yyyy-MM-dd HH:mm:ss')")

//CustomObj 
public class CustomObj extends Expression {
    private Object _value;

    public CustomObj(Object value) {
        _value = value;
    }

    @Override
    public boolean hasParens() {
        return false;
    }

    @Override
    protected void collectSchemaObjects(ValidationContext vContext) {
    }

    @Override
    public void appendTo(AppendableExt app) throws IOException {
        app.append(_value);
    }
}

BinaryCondition.greaterThan(value1, value2, inclusive);

像hire_date这样的sql >= to_date('2011-02-28 00:00:00','yyyy-MM-dd HH:mm:ss'))

于 2019-02-20T08:19:01.727 回答