sql >> Databasteknik >  >> RDS >> Oracle

Kriterier för viloläge för datum

Varför använder du Restrictions.like(... )?

Du bör använda Restrictions.eq(...) .

Observera att du också kan använda .le , .lt , .ge , .gt på datumobjekt som jämförelseoperatorer. LIKE operatorn är inte lämplig för det här fallet eftersom LIKE är användbart när du vill matcha resultat enligt en del av innehållet i en kolumn. Se http://www.sql-tutorial.net/SQL-LIKE.asp för referens.

Om du till exempel har en namnkolumn med vissa personers fullständiga namn, kan du göra where name like 'robert %' så att du returnerar alla poster med namn som börjar med 'robert ' (% kan ersätta vilket tecken som helst).

I ditt fall känner du till hela innehållet i datumet du försöker matcha så du bör inte använda LIKE men jämlikhet. Jag antar att Hibernate inte ger dig något undantag i det här fallet, men hur som helst kommer du förmodligen att ha samma problem med Restrictions.eq(...) .

Ditt datumobjekt fick du med koden:

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

Detta datumobjekt är lika med 2011-04-17 vid 0h, 0 minuter, 0 sekunder och 0 nanosekunder.

Det betyder att dina poster i databasen måste ha exakt det datumet. Vad jag menar är att om din databaspost har ett datum "17-April-2011 19:20:23.707000000", så kommer den inte att hämtas eftersom du bara ber om det datumet:"17-April-2011 00:00:00.0000000000".

Om du vill hämta alla poster i din databas från en viss dag måste du använda följande kod:

    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. ORA-04021:timeout inträffade i väntan på att låsa objekt

  2. Utför produktanalys med SQL Server Full-Text Search. Del 1

  3. Ansluter F# till Salesforce.com

  4. PHP/MySQL Infoga null-värden