2017-07-21 4 views
-3

ich eine Störung erhalte:falsches Datum Formatfehler

ORA-01858: a non-numeric character was found where a numeric was expected

während diesen Code ausführen:

SELECT 
    user_id, 
    user_name, 
    employee_id, 
    start_date, 
    end_date, 
    last_update_date, 
    MAX (start_date) OVER (PARTITION BY f.employee_id) AS max_start_date, 
    MAX (last_update_date) OVER (PARTITION BY f.employee_id) AS max_last_update_date 
FROM 
    refadm.cg1_fnd_user f 
WHERE 
    TO_DATE (SYSDATE, 'DD/MON/YY HH:MI:SSAM') <= 
      COALESCE (TO_DATE (f.end_date, 'yyyy-MM-dd'), SYSDATE + 1) 
+0

was ist der Datentyp von f.end_date? – Boneist

+0

Bitte lesen Sie diese https://stackoverflow.com/help/someone-answers – XING

Antwort

3

nicht umwandeln sysdate auf ein Datum - es ist bereits ein date:

WHERE SYSDATE <= TO_DATE(f.end_date, 'yyyy-MM-dd') OR 
     f.end_date IS NULL 

Sie können immer noch das Problem bekommen, je nachdem, was f.end_date aussieht. Aber die Logik ist zumindest einfacher. Wenn f.end_date nur manchmal im Format yyyy-MM-dd ist, können Sie die ungültigen Formate mit regulären Ausdrücken oder einer benutzerdefinierten Funktion behandeln.

EDIT:

Wenn end_date in einem anderen Format, dann das richtige Format verwenden:

WHERE SYSDATE <= TO_DATE(f.end_date, 'DD/MM/YYYY') OR 
     f.end_date IS NULL 
+0

f.end_date hat Datumswert im Format - 3/26/2013 –

+0

Dann müssen Sie 'TO_DATE (f.end_date, 'tt/MM/yyyy ') '- falls es wirklich eine ** Zeichenkette ** ist, dh' VARCAHR2' Datentyp. –

0

Wenn Ihr String hat Format '2013.03.26' - Sie ein falsches Format schrieben in to_date Funktion. Es sollte TO_DATE sein (f.end_date, 'MM-DD-YYYY') Der ganze Satz kann aussehen wie

WHERE SYSDATE <= TO_DATE(f.end_date, 'MM-DD-YYYY') OR 
     f.end_date IS NULL