我无法比较案例说明中的日期
ORA-00932:数据类型不一致:预期的CHAR在DATE得到了 00932。00000-“数据类型不一致:预期的%s得到了%s” *原因:
*动作:
在这里,我想将enter code here
START_DATE_ACTIVE小于PROJECT_START_DATE的情况下用PROJECT_START_DATE替换。
(
CASE WHEN TO_DATE(PPP.START_DATE_ACTIVE,'DD/MM/YY') <
TO_DATE(TO_CHAR(TO_DATE(PPA.PROJECT_START_DATE,'yyyy/mm/dd'),'DD-MM-
YY'),'DD/MM/YY')
THEN PPA.PROJECT_START_DATE
ELSE PPP.START_DATE_ACTIVE
END
) START_DATE_ACTIVE
预期结果
答案 0 :(得分:1)
如果您的日期实际上存储在日期字段中,则不必将其转换为字符,就可以将它们作为日期进行测试。
(
CASE WHEN PPP.START_DATE_ACTIVE < PPA.PROJECT_START_DATE
THEN PPA.PROJECT_START_DATE
ELSE PPP.START_DATE_ACTIVE
END
) START_DATE_ACTIVE
答案 1 :(得分:0)
正如其他人指出的那样,一旦日期正确包含在DATE类型中,就无需使用to_date或to_char来执行数据操作。这些例程仅是从/向人类可读形式转换所必需的。但这可能不是全部。 Oracle DATE类型包含日期和时间部分。似乎多次转换通常是尝试删除时间成分。但这不是必需的。可以使用trunc功能(实际上将时间设置为00:00:00)。如果是这种情况,您只需要日期部分,那么您的case语句将减少为
case
when trunc(ppp.start_date_active) < trunc(ppa.project_start_date)
then trunc(ppa.project_start_date)
else trunc(ppp.start_date_active)
end start_date_active;
但是可以将其简化为以下一行:
trunc(greatest(start_date_active,project_start_date)) start_date_active
答案 2 :(得分:-1)
答案:
(CASE WHEN TO_DATE (PPP.START_DATE_ACTIVE,'DD/MM/YY') <
TO_DATE (TO_CHAR(TO_DATE(PPA.PROJECT_START_DATE,'yyyy/mm/dd'),'DD-MM-YY'),'DD/MM/YY')
THEN TO_DATE (TO_CHAR(TO_DATE(PPA.PROJECT_START_DATE,'yyyy/mm/dd'),'DD-MM-YY'),'DD/MM/YY')
ELSE TO_DATE (PPP.START_DATE_ACTIVE,'DD/MM/YY')
END
)
结果字段日期格式应与您的比较日期格式相同。