Convierte la cadena de formato "yyy-MM-dd" con fecha como tipo de datos

Lenita Quejado :

Estoy tratando de obtener los datos almacenados en la base de datos por conseguir la fecha y luego rellenar la tabla.

    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();
    }

El problema aquí es que me da una excepción de error:

java.lang.ClassCastException: java.lang.String clase no se puede convertir a la clase java.util.Date (java.lang.String y java.util.Date están en java.base módulo del cargador de 'arranque')

Yo sé lo que está mal porque los List<String> contentsvalores son cuerdas y necesitaba ser convertido a la fecha, pero me trataron tantos códigos y no funciona.

//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));

Así que, ¿hay alguna manera de cambiar el valor dado hasta la fecha, pero debe conserva el formato "aaaa-MM-dd" y el tipo de datos debería ser la fecha.

PD: el formato de fecha en la base de datos es "aaaa-MM-dd" también. Tanto mi campo de entidad fecha y la fecha a partir de DB es a la vez la fecha como su tipo de datos.

Boris Barco:

Se puede utilizar likeel operador sólo en cadena ( VARCHAR) campos. En la cláusula WHERE usted tiene que convertir su campo de cadena (usando la función de formato) con el fin de poder utilizar LIKE. Así que hay que llamar a la función de conversión (también) en la consulta.

Por desgracia, no hay fecha en funciones EJBQL, por lo que tendrá que cambiar a la consulta nativa. Por ejemplo, para Oracle puede utilizar TO_CHARcomo esto

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

Para obtener un rendimiento bueno, tendrá que añadir un índice funcional.

Ver también http://www.sqlines.com/oracle-to-sql-server/to_char_datetime


Una alternativa sería añadir una columna nueva cadena date_string, que contendrá la representación con formato de fecha y utilizar esta columna con LIKE. Pero tendrá que estar absolutamente seguro de que ambas fechas siempre están sincronizados.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=315973&siteId=1
Recomendado
Clasificación