Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle:niepoprawny miesiąc

1.

To_Date(To_Char(MaxDate, 'DD/MM/YYYY')) = REP_DATE

powoduje problem. jeśli użyjesz to_date bez formatu czasu, Oracle użyje do konwersji bieżącego formatu NLS sesji, który w twoim przypadku może nie być „DD/MM/RRRR”. Sprawdź to...

SQL> select sysdate from dual;

SYSDATE
---------
26-SEP-12

Which means my session's setting is DD-Mon-YY

SQL> select to_char(sysdate,'MM/DD/YYYY') from dual;

TO_CHAR(SY
----------
09/26/2012


SQL> select to_date(to_char(sysdate,'MM/DD/YYYY')) from dual;
select to_date(to_char(sysdate,'MM/DD/YYYY')) from dual
               *
ERROR at line 1:
ORA-01843: not a valid month

SQL> select to_date(to_char(sysdate,'MM/DD/YYYY'),'MM/DD/YYYY') from dual;

TO_DATE(T
---------
26-SEP-12

2.

Co ważniejsze, dlaczego konwertujesz na char, a następnie na datę, zamiast bezpośrednio porównywać

MaxDate = REP_DATE

Jeśli chcesz zignorować składnik czasu w MaxDate przed porównaniem, powinieneś użyć...

trunc(MaxDate ) = rep_date

zamiast tego.

==Aktualizacja:na podstawie zaktualizowanego pytania.

Rep_Date = 01/04/2009 Rep_Time = 01/01/1753 13:00:00

Myślę, że problem jest bardziej złożony. jeśli rep_time ma być tylko czasem, to nie możesz przechowywać go w bazie danych jako daty. Musiałby to być ciąg znaków lub przedział czasowy lub liczbowo jako sekundy (dzięki Alex, patrz to ) . Jeśli to możliwe, sugerowałbym użycie jednej kolumny rep_date, która zawiera zarówno datę, jak i godzinę, i porównaj ją bezpośrednio z kolumną maksymalnej daty.

Jeśli jest to uruchomiony system i nie masz kontroli nad repdate, możesz spróbować tego.

trunc(rep_date) = trunc(maxdate) and 
to_char(rep_date,'HH24:MI:SS') = to_char(maxdate,'HH24:MI:SS')

Tak czy inaczej, czas jest przechowywany nieprawidłowo (jak można stwierdzić od roku 1753) i mogą pojawić się inne problemy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak konwertować wiersze na kolumny w tabeli Oracle

  2. Proces aktualizacji krok po kroku do aktualizacji R12.2 część -2 (główny sterownik aktualizacji dla R12.2.0)

  3. Wildfly nie udało się załadować modułu dla sterownika Oracle

  4. Zignorowano instrukcję PL/SQL SQL*Plus

  5. Wstawianie klucza obcego z wieloma wartościami