1

これは機能します:

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

私の質問:最初の方法ではなく、SQLのCASE行に列名「a.date_completed」を配置する2番目の方法を機能させるための回避策はありますか?2番目のSQLの構文は完全にオフになっていますか?

4

2 に答える 2

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
于 2012-07-12T06:26:55.353 に答える
1

date_completedcaseステートメントで文字列に変換します。

これを試して:

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
于 2012-07-06T22:19:34.100 に答える