sql >> Database teknologi >  >> RDS >> Oracle

Oracle:ikke en gyldig måned

1.

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

er årsag til problemet. når du bruger to_date uden tidsformatet, vil Oracle bruge det aktuelle sessions NLS-format til at konvertere, hvilket i dit tilfælde måske ikke er "DD/MM/ÅÅÅÅ". Tjek dette...

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.

Endnu vigtigere, hvorfor konverterer du til char og derefter til dato i stedet for direkte at sammenligne

MaxDate = REP_DATE

Hvis du vil ignorere tidskomponenten i MaxDate før sammenligning, bør du bruge..

trunc(MaxDate ) = rep_date

i stedet.

==Opdatering:baseret på opdateret spørgsmål.

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

Jeg tror, ​​problemet er mere komplekst. hvis rep_time er beregnet til kun at være tid, kan du ikke gemme det i databasen som en dato. Det skal være en streng eller dato til tidsinterval eller numerisk som sekunder (takket være Alex, se dette ). Hvis det er muligt, vil jeg foreslå at bruge én kolonne rep_date, der har både dato og klokkeslæt, og sammenligne den direkte med kolonnen maks. dato.

Hvis det er et kørende system, og du ikke har kontrol over repdate, kan du prøve dette.

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

Uanset hvad bliver tiden gemt forkert (som du kan se fra år 1753), og der kan være andre problemer fremover.



  1. Forkert nøglefil til tabellen '/tmp/#sql_3c51_0.MYI' prøv at reparere den

  2. Prag PostgreSQL Developer Day 2016

  3. hvordan man vælger to kolonner fra to tabeller i mysql

  4. Sådan kører du fjernjob fra IRI Workbench