2017-07-21 98 views
-3

我得到一個錯誤:正確的日期格式錯誤

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

同時執行此代碼:

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

是什麼f.end_date的數據類型? – Boneist

+0

請仔細閱讀本https://stackoverflow.com/help/someone-answers – XING

回答

3

不要轉換sysdate爲一個日期 - 這已經是一個date

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

您仍然可能會遇到問題,具體取決於f.end_date的外觀。但邏輯是至少簡單。

如果f.end_date有時只有yyyy-MM-dd格式,則可以使用正則表達式或用戶定義的函數來處理無效格式。

編輯:

如果end_date是不同的格式,然後用正確的格式:

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

f.end_date具有日期值的格式 - 2013年3月26日 –

+0

那麼你必須使用'TO_DATE(f.end_date,「DD/MM/YYYY')' - 如果它真的是一個** **字符串,即'VARCAHR2'數據類型。 –

0

如果字符串具有格式「2013年3月26日」 - 你寫了一個格式錯誤to_date函數。它應該是TO_DATE(f.end_date, 'MM-DD-YYYY') 整個句子能像

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