sql >> Database >  >> RDS >> Oracle

Slaapstandcriteria voor datums

Waarom gebruik je Restrictions.like(... )?

Gebruik Restrictions.eq(...) .

Merk op dat u ook .le . kunt gebruiken , .lt , .ge , .gt op datumobjecten als vergelijkingsoperatoren. LIKE operator is niet geschikt voor dit geval omdat LIKE is handig als u resultaten wilt afstemmen op gedeeltelijke inhoud van een kolom. Zie http://www.sql-tutorial.net/SQL-LIKE.asp voor de referentie.

Als u bijvoorbeeld een naamkolom heeft met de volledige naam van sommige mensen, kunt u where name like 'robert %' doen zodat u alle items retourneert waarvan de naam begint met 'robert ' (% kan elk teken vervangen).

In jouw geval ken je de volledige inhoud van de datum die je probeert te matchen, dus je moet LIKE niet gebruiken maar gelijkheid. Ik denk dat Hibernate je in dit geval geen uitzondering geeft, maar hoe dan ook, je zult waarschijnlijk hetzelfde probleem hebben met de Restrictions.eq(...) .

Je date-object dat je hebt gekregen met de code:

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

Dit datumobject is gelijk aan 17-04-2011 om 0u, 0 minuten, 0 seconden en 0 nanoseconden.

Dit betekent dat uw gegevens in de database exact . moeten hebben die datum. Wat ik bedoel is dat als je database-invoer de datum "17-April-2011 19:20:23.707000000" heeft, het niet zal worden opgehaald omdat je gewoon om die datum vraagt:"17-April-2011 00:00:00.0000000000".

Als u alle gegevens van uw database van een bepaalde dag wilt ophalen, moet u de volgende code gebruiken:

    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. Hoe SQL * PLUS-client in linux te installeren

  2. Hoe gebruik ik RETURNING met ON CONFLICT in PostgreSQL?

  3. Hoe id met max datumgroep per categorie selecteren in PostgreSQL?

  4. COT() Voorbeelden in SQL Server