Oracle SQL + Java

0

Witam,

Mam problem z uzyskaniem poprawnych wyników poniższego zapytania wykonywanego w Javie.

Kopiuj
 ResultSet rs = getResultStatement("SELECT * FROM MECZ WHERE CAST(DATA_ROZPOCZECIA AS DATE) = '" + matchDate.toLocalDateTime().toLocalDate() + "'");

DATA_ROZPOCZECIA jest typu TIMESTAMP(0), a matchDate to java.sql.Timestamp. Kod nie generuje żadnych błędów, natomiast występuje tutaj problem z porównywaniem dat. Mianowicie nie po wykonaniu tego zapytania nie są znajdywane daty identyczne do tej, która jest w zmiennej matchDate, chociaż istnieją one w bazie. Po wykonaniu zapytania:

Kopiuj
 rs = getResultStatement("SELECT CAST(DATA_ROZPOCZECIA AS DATE) FROM MECZ");

oraz po wypisaniu wyników w konsoli pojawia się:

Kopiuj
2017-01-21
2017-01-21
2017-01-21

Po wypisaniu wyniku następującego kodu:

Kopiuj
 matchDate.toLocalDateTime().toLocalDate()

Wyświetla się:

Kopiuj
 2017-01-21

Dodam, że gdy zmienię znak porównania na ">" w pierwszym zapytaniu, to znajduje mi powyższe dane.
Jakie mogą być przyczyny takiego zachowania? Dlaczego zapytanie nie znajduje danych, które są identyczne z danymi porównywanymi?
Z góry dziękuję za pomoc!

P7
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 21 godzin
  • Lokalizacja:Warszawa
  • Postów:89
1

https://oracle-base.com/articles/misc/oracle-dates-timestamps-and-intervals
Both DATE and TIMESTAMP columns contain a time component

do porównania potrzebujesz użyć funkcji TRUNC , żeby "przyciąć" czas z daty

abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
1
  1. użyj jakiegoś ORMa zamiast samemu klecić zapytania
  2. jak już chcesz samemu klecić zapytania to użyj parametrów zamiast sklecać tak zapytanie podając datę jako string
  3. jak już chcesz samemu klecić zapytania bez parametrów to zamiast zrób tak "... WHERE trunc(DATA_ROZPOCZECIA) = To_date('" + format(matchDate, "yyyy-MM-DD") + "', 'yyyy-mm-dd')" chodzi o to abyś był pewny, że ZAWSZE format podawanej daty będzie taki sam jak oczekiwany format daty

Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
edytowany 1x, ostatnio: abrakadaber
W0
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 7 lat
  • Postów:4
0

Macie racje. Dzięki śliczne Panowie!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.