データ型として日付で「YYY-MM-DD」形式に文字列を変換

Lenitaを訴えました。

私は日付が、テーブルを移入取得することにより、データベースに格納されたデータを取得しようとしています。

    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が:クラスjava.lang.Stringクラスjava.util.Dateにキャストすることはできません(java.lang.Stringでとjava.util.Dateローダー「ブートストラップ」のモジュールjava.baseです)

私はので、間違っているものを知っているList<String> contents値は、文字列と日付に変換する必要があるが、私は非常に多くのコードを試してみましたが、それは動作しません。

//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」です。DBからの私の日付エンティティフィールドと日付の両方が彼らのデータ型との両方日です。

ボリス船:

あなたは使用することができlike、オペレータのみ文字列の(VARCHAR)のフィールドを。WHERE句では、使用できるようにするために(フォーマット機能を使用して)文字列に自分のフィールドを変換する必要がありますLIKEクエリでCONVERT関数(も)を呼び出す必要がありますので。

あなたはネイティブクエリに切り替える必要がありますので、残念ながら、DATE関数は、EJBQLではありません。たとえば、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しかし、あなたは両方の日付が常に同期されていること、絶対に確認する必要があります。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=315970&siteId=1