sql >> Database teknologi >  >> RDS >> Oracle

Dvalekriterier for datoer

Hvorfor bruger du Restrictions.like(... )?

Du bør bruge Restrictions.eq(...) .

Bemærk, at du også kan bruge .le , .lt , .ge , .gt på datoobjekter som sammenligningsoperatorer. LIKE operator er ikke passende i dette tilfælde, da LIKE er nyttig, når du vil matche resultater i henhold til delvist indhold af en kolonne. Se venligst http://www.sql-tutorial.net/SQL-LIKE.asp for reference.

For eksempel hvis du har en navnekolonne med nogle personers fulde navn, kan du gøre where name like 'robert %' så du vil returnere alle poster med navn, der starter med 'robert ' (% kan erstatte et hvilket som helst tegn).

I dit tilfælde kender du det fulde indhold af den dato, du prøver at matche, så du bør ikke bruge LIKE men ligestilling. Jeg gætter på, at Hibernate ikke giver dig nogen undtagelse i dette tilfælde, men alligevel vil du sandsynligvis have det samme problem med Restrictions.eq(...) .

Dit datoobjekt fik du med koden:

SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-YYYY");
String myDate = "17-04-2011";
Date date = formatter.parse(myDate);
 

Dette datoobjekt er lig med 17-04-2011 kl. 0h, 0 minutter, 0 sekunder og 0 nanosekunder.

Det betyder, at dine poster i databasen skal have præcis den dato. Hvad jeg mener er, at hvis din databasepost har en dato "17-April-2011 19:20:23.707000000", så vil den ikke blive hentet, fordi du bare beder om denne dato:"17-April-2011 00:00:00.0000000000".

Hvis du vil hente alle indtastninger i din database fra en given dag, skal du bruge følgende kode:

SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-YYYY"); String myDate = "17-04-2011"; // Create date 17-04-2011 - 00h00 Date minDate = formatter.parse(myDate); // Create date 18-04-2011 - 00h00 // -> We take the 1st date and add it 1 day in millisecond thanks to a useful and not so known class Date maxDate = new Date(minDate.getTime() + TimeUnit.DAYS.toMillis(1)); Conjunction and = Restrictions.conjunction(); // The order date must be >= 17-04-2011 - 00h00 and.add( Restrictions.ge("orderDate", minDate) ); // And the order date must be < 18-04-2011 - 00h00 and.add( Restrictions.lt("orderDate", maxDate) );

  1. Sådan får du lat og long fra sdo_geometry i oracle

  2. Få visningsoplysninger med VIEWS Information Schema View i SQL Server

  3. Liste over lagrede procedurer/funktioner Mysql-kommandolinje

  4. Importer data til en MySQL-database