Derby/JavaDB Bei PS das übergebene Datum ändern

nazar

Mitglied
Hi,

erstmal der Codeausschnitt:
Code:
  PreparedStatement psSelectDayOneDayBeforeByDate = myDatabase.getPreparedStatement(
         "SELECT MAX(endtime) "
         + "FROM my_days "
         + "WHERE day=?"
  );
Daran übergeben ich ein sql.Date.
Nun möchte ich aber nach einem Tag davor abfragen. Z. B.: "WHERE day=? - DAY(1)".
Was ich bisher so gefunden habe, manipuliert den Tag bevor er in die Abfrage kommt.
Allerdings würde ich mir das gerne sparen und die Abfrage das erledigen lassen.
Gibts da etwas oder wäre der Calendar die beste Lösung?
 
berechne die Differenz aus Feld und Parameter, je nach DB kommt da ein Zahlwert wie 1 oder was spezielleres in 'Tag-Währung' raus,
vielleicht gibt es auch spezielle Methode für Date-Differenz, kann man sicher suchen,
auf das Ergebnis dann einschränken
 
Vllt schränkt mich hier Derby ein.
Bei "WHERE (? - 1) = day" gibts
Code:
java.sql.SQLSyntaxErrorException: Comparisons between 'INTEGER' and 'DATE' are not supported.
Und bei "WHERE (? - day) = 1
Code:
java.sql.SQLSyntaxErrorException: The '-' operator with a left operand type of 'DATE' and a right operand type of 'DATE' is not supported.
Die zweite Fehlermeldung würde ich laut - (Subtraktion) (Transact-SQL) auch bei microsoft bekommen. Wobei dort das Erste funktionieren müsste.
DATEADD() und DATESUB() scheinen bei Derby auch nicht zu funktionieren.
Muss ich mich wohl wieder in die API stürzen. :/
 
Habs hinbekommen. Hier mal die ziemlich hässliche Lösung:
Code:
"WHERE CAST ({fn timestampadd(SQL_TSI_DAY, -1, CAST(? AS TIMESTAMP))} AS DATE) = day"
 

Zurück
Oben