Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara mencari bidang tanggal untuk String menggunakan API Kriteria JPA

Oke, setelah banyak bereksperimen dengan berbagai strategi, inilah yang saya lakukan yang akhirnya berhasil.

Saya melihat posting ini disini dan tiba-tiba teringat JPA Tuple Antarmuka yang merupakan Objek yang dapat mengembalikan beberapa Jenis hasil. Jadi untuk melakukan like saya perbandingan, dan karena Tanggal tidak bisa begitu saja dilemparkan ke String, inilah langkah-langkahnya;

  1. Saya mendapatkan kolom sebagai Tuple
  2. lakukan pemeriksaan pada Objek Tuple untuk melihat apakah itu dapat ditetapkan dari Tanggal
  3. jika ya, dapatkan ekspresi Format-Tanggal dan berikan ke like ekspresi.

Jadi intinya, inilah yang awalnya saya miliki yang tampaknya gagal;

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

Sekarang, inilah yang saya miliki yang berfungsi dengan baik;

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

PERTIMBANGAN YANG PERLU DIPERHATIKAN -

  1. Saya sadar bahwa dari mana pun pencarian akan dimulai, semua Tanggal saya ditampilkan dalam bentuk ini 07/10/2015 10:25:09 PM karenanya kemampuan saya untuk mengetahui cara memformat Tanggal untuk perbandingan di like my saya ekspresikan sebagai "'%d/%m/%Y %r'" .
  2. Ini hanya satu langkah yang berhasil untuk Dates. Sebagian besar Jenis lainnya misalnya int, long, char ...etc... semuanya dapat langsung Cast to String dan saat saya menjelajahi lebih banyak Jenis data, saya pasti akan melakukan hal yang sama untuk Jenis lain yang tidak dapat langsung Cast to String .

Meskipun ini bekerja dengan sempurna untuk saya, tetapi sebelum saya menandai ini sebagai jawaban yang benar, saya akan menjalani beberapa tes yang lebih ekstensif dan dalam prosesnya tetap terbuka untuk komentar oleh siapa pun yang memiliki keraguan tentang strategi saya.

Dan akhirnya, untuk satu orang yang membantu dengan cara apa pun... Semangat!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menghasilkan string acak yang unik untuk salah satu kolom tabel MySql saya?

  2. MySQL Group Dengan dengan nomor N teratas dari masing-masing jenis

  3. Bagaimana cara memasukkan pesan email masuk ke database mySQL?

  4. CONVERT_TZ() Contoh – MySQL

  5. Django - menginstal kesalahan mysqlclient:mysqlclient 1.3.13 atau yang lebih baru diperlukan; kamu punya 0.9.3