当前位置: 首页 > 面试题库 >

在Hibernate Criteria中将日期转换为字符串

帅德惠
2023-03-14
问题内容

是否可以执行检查Date实例的字符串表示形式的请求。例如

Restrictions.like("dateField", "%12%")

检索日期为天12或月12或年12的日期,其中“ dateField”是java.util.Date的实例


问题答案:

我遇到了同样的问题,这是我做的:

首先,我创建了自己的Criterion实现:

public class DateLikeExpression implements Criterion {

private static final long serialVersionUID = 1L;
private String propertyName;
private String value;

public DateLikeExpression(String propertyName, String value) {
    this.propertyName = propertyName;
    this.value = value;
}

public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
    String[] columns = criteriaQuery.getColumnsUsingProjection(criteria, propertyName);
    if (columns.length != 1) {
        throw new HibernateException("Like may only be used with single-column properties");
    }
    return "to_char(" + columns[0] + ", 'DD/MM/YYYY HH24:MI') like ?";
}

public TypedValue[] getTypedValues(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
    return new TypedValue[] { new TypedValue(new org.hibernate.type.StringType(),
            MatchMode.START.toMatchString(value.toLowerCase()), EntityMode.POJO) };
}

}

然后,当我将条件放在一起时,我就用它:

criteria.add(new DateLikeExpression("dateColumnName", "26/11%"));

就是这样。请注意,此实现 是与
语言环境相关的(在这种情况下为pt_BR),并且适用于具有to_char函数的postgresql。您可能需要稍微调整一下才能使用数据库引擎。



 类似资料:
  • 问题内容: 我正在尝试将字符串解析为android应用程序中的日期字段,但似乎无法正确理解。这是我要转换为日期“ 2012/03/26/11:49:00 AM”的字符串。我正在使用的功能是: 但我不断得到结果。 问题答案: 您显示我猜测的数据的方式是错误的,因为对我来说: 印刷品:

  • 问题内容: 如何在JavaScript中将字符串转换为日期? 问题答案: 字符串解析的最佳字符串格式是日期ISO格式以及JavaScript Date对象构造函数。 ISO格式的示例:或。 可是等等! 仅仅使用“ ISO格式”本身不能可靠地工作。字符串有时会解析为UTC,有时会解析为本地时间(基于浏览器供应商和版本)。最佳做法应始终是将日期存储为UTC并进行计算为UTC。 要将日期解析为UTC,请

  • 问题内容: 我正在Access 2003中的表之间迁移数据。在旧表中,日期以YYYYMMDD格式存储为文本字段。 我想将该字段存储为新表中的日期时间。我曾尝试在SQL语句中使用,但它仅显示为结果。 我究竟做错了什么? 问题答案: 例如 所以,在您的情况下

  • 问题内容: 如何将该字符串转换为,并仅保留年,月,日,小时? 它的中间部分真的使我不习惯使用日期时。 问题答案: 将ISO8601字符串转换为日期 从日期获取年,月,日和小时的日期部分 let components = calendar.dateComponents([.year, .month, .day, .hour], from: date) 最后创建一个新对象并删除分钟和几秒钟 还请考虑i

  • 好吧,我把它修好了。 我想将字符串“10-feb-201911:20”转换为“dd-mm-yyyy hh24:mi:ss”。 我试着约会但没用。我在其他线程上看到翻译功能可能是可行的。然而,我对SQL有点陌生,没有一个关于如何使用这种方式的解释可以翻译到我能够理解的地方。 当(长度(列)=50then to_date(substr(列,1,17),'dd-mm-yyyy hh24:mi')) 否则

  • 问题内容: 是否可以将“ 20110210”转换为2011-02-10? 我试过,我得到 我究竟做错了什么? 我有新的SimpleDateFormat(“ yyyy-MM-dd”)而不是新的SimpleDateFormat(“ yyyyMMdd”) 问题答案: 这对我有用,不会引发异常: