-2

我无法比较案例陈述中的日期

ORA-00932:不一致的数据类型:预期的 CHAR 得到 DATE 00932。00000 -“不一致的数据类型:预期的 %s 得到 %s”*原因:
*操作:

enter code here在这里,当它小于 PROJECT_START_DATE 时,我想用 PROJECT_START_DATE 替换START_DATE_ACTIVE。

请参考这里的数据

(
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

预期结果

预期结果

4

3 回答 3

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
于 2019-08-01T17:12:37.377 回答
0

正如其他人所指出的,一旦日期正确包含在 DATE 类型中,就无需使用 to_date 或 to_char 来执行数据操作。这些例程仅在从/转换为人类可读形式时是必需的。但这可能不是全部。Oracle DATE 类型包含日期和时间组件。似乎多次转换通常是试图删除时间组件。但即使这样也没有必要。trunc 函数可用于此(实际上它将时间设置为 00:00:00)。如果这里的情况是您只需要日期组件,那么您的案例陈述会减少到

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 
于 2019-08-01T22:39:14.270 回答
-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

)

结果字段日期格式应与您的比较日期格式相同。

于 2019-08-01T17:17:34.427 回答