sql >> Database >  >> RDS >> Oracle

Oracle:geen geldige maand

1.

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

het probleem veroorzaakt. wanneer u to_date gebruikt zonder de tijdnotatie, zal oracle de huidige sessie NLS-indeling gebruiken om te converteren, wat in uw geval mogelijk niet "DD/MM/YYYY" is. Controleer dit...

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.

Wat nog belangrijker is, waarom converteert u naar char en vervolgens naar datum, in plaats van direct te vergelijken

MaxDate = REP_DATE

Als u de tijdcomponent in MaxDate wilt negeren voordat u gaat vergelijken, moet u..

. gebruiken
trunc(MaxDate ) = rep_date

in plaats daarvan.

==Update:gebaseerd op bijgewerkte vraag.

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

Ik denk dat het probleem complexer is. als rep_time bedoeld is om alleen tijd te zijn, dan kun je het niet in de database opslaan als een datum. Het zou een string moeten zijn of een datum-tot-tijdsinterval of numeriek als seconden (dankzij Alex, zie dit ) . Als het mogelijk is, raad ik aan om één kolom rep_date te gebruiken die zowel de datum als de tijd bevat en deze rechtstreeks te vergelijken met de maximale datumkolom.

Als het een draaiend systeem is en je geen controle hebt over de herhaling, zou je dit kunnen proberen.

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

Hoe dan ook, de tijd wordt verkeerd opgeslagen (zoals je kunt zien vanaf het jaar 1753) en er kunnen in de toekomst andere problemen zijn.



  1. docker mysql op andere poort

  2. Hoe kan ik een string converteren naar een float in mysql?

  3. Maak een lijst van alle indexnamen, kolomnamen en de tabelnaam van een PostgreSQL-database

  4. Database-ontwerp met Vertabelo