在表UPDATE上交替使用CASE

时间:2012-07-06 21:58:10

标签: sql oracle syntax

这有效:

UPDATE KEYBOARD_LEARNING a
SET a.date_completed =
CASE
  WHEN a.date_completed = '04-JUL-2012' THEN '06-JUL-2012'
    END
    WHERE a.emplid = 18

但这不会(下图)。我得到的错误是数据类型不匹配,当然这是有道理的,因为一个是DATE数据类型而另一个是NUMBER。

UPDATE KEYBOARD_LEARNING a
SET a.date_completed =
CASE a.date_completed 
  WHEN  '04-JUL-2012' THEN '06-JUL-2012'
    END
    WHERE a.emplid = 21

我的问题:有没有一种解决方法让我的第二种方式工作,我将列名'a.date_completed'放在SQL的CASE行中而不是我如何让它以第一种方式工作?我是否完全关闭了第二个SQL的语法?

2 个答案:

答案 0 :(得分:2)

您可以改为使用日期文字:

UPDATE KEYBOARD_LEARNING a
SET a.date_completed =
  CASE a.date_completed 
    WHEN  DATE '2012-07-04' THEN DATE '2012-07-06'
  END
WHERE a.emplid = 21

答案 1 :(得分:1)

在case语句中将date_completed转换为String。

试试这个:

UPDATE KEYBOARD_LEARNING a
   SET a.date_completed =
         CASE TO_CHAR(a.date_completed, 'DD-MON-RRRR')
          WHEN  '04-JUL-2012' THEN TO_DATE('06-JUL-2012','DD-MON-RRRR')
         END
 WHERE a.emplid = 21