我收到错误:
执行此代码时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)
答案 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