Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak wyszukiwać w polu daty dla ciągu znaków za pomocą interfejsu JPA Criteria API

Ok, po wielu eksperymentach z różnymi strategiami, oto co zrobiłem, co w końcu zadziałało.

Widziałem ten post tutaj i nagle przypomniałem sobie Tuple JPA Interfejs będący obiektem, który może zwrócić wiele typów wyników. Aby wykonać moje like porównanie, a ponieważ Data nie może być po prostu rzutowana na String, oto kroki;

  1. Otrzymuję kolumnę jako Tuple
  2. sprawdź obiekt krotki, aby zobaczyć, czy można go przypisać od daty
  3. jeśli tak, pobierz wyrażenie Date-Format i przekaż je do like wyrażenie.

Zasadniczo oto, co początkowo miałem, a które najwyraźniej zawiodło;

predicates.add(cb.like(cb.lower(entity.get("dateJoined").as(String.class)), "%"+search.toLowerCase()+"%")); 

Teraz to, co mam, działa pięknie;

Path<Tuple> tuple = entity.<Tuple>get("dateJoined");
if(tuple.getJavaType().isAssignableFrom(Date.class)){
    Expression<String> dateStringExpr = cb.function("DATE_FORMAT", String.class, entity.get("dateJoined"), cb.literal("'%d/%m/%Y %r'"));
    predicates.add(cb.like(cb.lower(dateStringExpr), "%"+search.toLowerCase()+"%"));
}

WZGLĘDY WARTE UWAGI -

  1. Zdaję sobie sprawę, że z miejsca, w którym rozpoczęłoby się wyszukiwanie, wszystkie moje daty są prezentowane w tym formularzu 07/10/2015 10:25:09 PM stąd moja umiejętność sformatowania daty do porównania w moim like wyrażenie jako "'%d/%m/%Y %r'" .
  2. To tylko jeden krok, który działa w przypadku Daty. Większość innych typów, np. int, long, char ...itd... może być bezpośrednio Cast to String, a gdy będę odkrywać więcej typów danych, na pewno zrobię to samo dla każdego innego Type, który nie może być bezpośrednio Cast to String .

Chociaż to działa idealnie dla mnie, ale zanim oznaczę to jako właściwą odpowiedź, poddam to bardziej obszernym testom, a przy tym pozostanę otwarty na komentarze wszystkich, którzy mają jakiekolwiek zastrzeżenia do mojej strategii.

I wreszcie, dla tej jednej osoby, której to w jakikolwiek sposób pomogło... Na zdrowie!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przewodnik po projektowaniu bazy danych dla systemu zarządzania pracownikami w MySQL

  2. Kolejność MYSQL według sortowania rosnąco i malejąco

  3. Uruchamianie skryptu .sql przy użyciu MySQL z JDBC

  4. Zmiana nazw kolumn kluczy obcych w MySQL

  5. Czy zastąpić na ma klauzulę WHERE?