将字符串转换为"yyy-MM-dd"格式,并将日期作为数据类型



我试图通过获取日期然后填充表来获取存储在数据库中的数据。

List<String> contents = new ArrayList<>();
List<Record> records
try {
Session session = sessionFactory.getCurrentSession();
Query<World> query = null;
query = session.createQuery("from World where date like :dateCont, World.class);
query.setParameter("dateCont", "%" + contents.get(0) + "%");
worlds = query.getResultList();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

这里的问题是它给了我一个错误异常:

java.lang.ClassCastException: class java.lang.String 不能强制转换为 类 java.util.Date (java.lang.String 和 java.util.Date 在 模块 java.base of loader 'bootstrap'(

我知道出了什么问题,因为List<String> contents值是字符串,需要转换为 Date,但我尝试了很多代码,但它不起作用。

//The following are the codes that I tried but it won't work:
//FIRST
Date date = new SimpleDateFormat("MM/dd/yyyy").parse(contentsStart.get(0));
new SimpleDateFormat("yyyy-MM-dd").format(date);
//---------------------------------------
//SECOND
Date newDate;
DateFormat formatter = null;
formatter = new SimpleDateFormat("yyyy-MM-dd");
newDate = (Date) formatter.parse(contentsStart.get(0));

那么,有没有办法将给定的值更改为日期,但它应该保留格式"yyyy-MM-dd",数据类型应该是日期。

PS:数据库中的日期格式也是"yyyy-MM-dd"。 我的日期实体字段和数据库中的日期都是日期,因为它们 数据类型。

试试这个:

DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date d1= (Date) format.parse(yourDate);

您只能在字符串 (VARCHAR( 字段上使用like运算符。在 WHERE 子句中,您必须将字段转换为字符串(使用格式函数(才能使用LIKE。因此,您必须在查询中调用转换函数(也(。

不幸的是,EJBQL 中没有 DATE 函数,因此您必须切换到本机查询。例如,对于 Oracle,您可以使用这样的TO_CHAR

SELECT ... WHERE TO_CHAR(date, 'MM/DD/YYYY') LIKE ...

为了获得良好的性能,您必须添加一个功能索引。

另请参阅 http://www.sqlines.com/oracle-to-sql-server/to_char_datetime


一种替代方法是添加一个新的字符串列date_string,它将包含日期的格式化表示形式,并将此列与LIKE一起使用。但是您必须绝对确定两个日期始终同步。

最新更新