日期格式错误不正确

时间:2017-07-21 10:54:09

标签: sql oracle

我收到错误:

  

ORA-01858:找到了一个非数字字符,其中数字是预期的

执行此代码时

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)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果您的字符串格式为'3/26/2013' - 您在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