2016-07-19 8 views
0

Ich habe eine Abfrage wie dieseOracle Fehler im Datumsformat

SELECT ITEM_CODE FROM my_table WHERE JOB_DATE BETWEEN 

CASE WHEN EXTRACT(MONTH FROM TO_DATE(:ST_DATE,'DD/MM/YYYY')) = EXTRACT (MONTH FROM TO_DATE(:END_DATE,'DD/MM/YYYY')) THEN TO_CHAR(ADD_MONTHS(:ST_DATE,-1),'DD/MM/YYYY') 

    WHEN EXTRACT(MONTH FROM TO_DATE(:ST_DATE,'DD/MM/YYYY')) != EXTRACT (MONTH FROM TO_DATE(:END_DATE,'DD/MM/YYYY')) THEN TO_CHAR(TRUNC(ADD_MONTHS(:ST_DATE,-1),'MONTH'),'DD/MM/YYYY') END 

    AND 

CASE WHEN EXTRACT(MONTH FROM TO_DATE(:ST_DATE,'DD/MM/YYYY')) = EXTRACT (MONTH FROM TO_DATE(:END_DATE,'DD/MM/YYYY')) THEN  TO_CHAR(ADD_MONTHS(:END_DATE,-1),'DD/MM/YYYY') 

    WHEN EXTRACT(MONTH FROM TO_DATE(:ST_DATE,'DD/MM/YYYY')) != EXTRACT (MONTH FROM TO_DATE(:END_DATE,'DD/MM/YYYY')) THEN TO_CHAR(LAST_DAY(ADD_MONTHS(:ST_DATE,-1)),'DD/MM/YYYY') END 

ich das Datum im Standardformat am Eingabe als 'dd-mon-yyyy' und wollen 'DD/MM/YYYY' angezeigt werden in der Bericht. Aber das gibt mir Fehler als

ORA-01843: not a valid month 

in der Tabelle Job_date als Typ DATE gespeichert ist. Was kann ich tun, um dies zu lösen? st_date in Datum mit bestimmtem Format 'TT/MM/YYYY':

Antwort

0

Diese Funktion

TO_DATE(:ST_DATE,'DD/MM/YYYY') 

versucht Zeichenfolge zu konvertieren. Wenn Sie das Datum in einem anderen Format eingeben ('dd-mon-yyyy'), erhalten Sie ORA-01843. in gewünschtem Format Verwendung 'DD-MON-YYYY' in TO_DATE Funktion und 'TT/MM/YYYY' in TO_CHAR Funktion

Auch

ADD_MONTHS(:ST_DATE, -1) 

werden versuchen, diesen Fehler zu vermeiden und dennoch das Datum anzeigen zu Konvertieren Sie st_date implizit in das Datum, indem Sie Ihre Sitzungseinstellungen verwenden. Ich würde vorschlagen, explizite Konvertierung zu verwenden:

ADD_MONTHS(TO_DATE(:ST_DATE, 'DD-MON-YYYY'),-1)