簡體   English   中英

帶有Case語句缺少關鍵字錯誤的Oracle SQL更新查詢

[英]Oracle SQL- Update Query with Case Statement Missing Keyword Error

我對SQL非常陌生(從3天前開始學習),所以我假設我的代碼中存在一些可怕的語法錯誤。

從昨天開始,我一直在研究它,嘗試創建一個更新查詢,該查詢使用案例根據以下條件修改value列:

  1. value包含字母“ a”時,將value大寫。
  2. 如果value包含字母“ d”,但不包含字母“ a”,則將value小寫。
  3. 如果value不滿足上述條件,則將第一個和最后一個字母從value更改為1和2。

我試圖通過多種方法來完成此操作,但是我總是會遇到某種錯誤。 此代碼返回缺少關鍵字錯誤:

UPDATE t1  
SET value = 
CASE   WHEN value LIKE '%a%' THEN SET value = UPPER(value)   
       WHEN value LIKE '%d%' AND value NOT LIKE '%a' THEN SET value = LOWER(value)   
       ELSE REPLACE(value,'_%','1') AND REPLACE(value,'%_','2') 
END
Where value IS NOT NULL; 

CASE返回一個值,因此您不需要那里的SET AND是一個條件運算符,它不能一起運行命令。

REPLACE()無法以您嘗試使用的方式工作。 它使用文字而不是通配符。 因此,除非value以下划線開頭和結尾,否則'_%'該命令不會更改任何內容。 建議您使用SUBSTR()而不是REPLACE()並連接替換字符。

UPDATE t1  
SET value = 
    CASE   WHEN value LIKE '%a%' THEN UPPER(value)   
           WHEN value LIKE '%d%' AND value NOT LIKE '%a' THEN LOWER(value)   
           ELSE '1'||substr(value, 2, length(value)-2) ||'2' 
    END
Where value IS NOT NULL;

或者,您可以使用正則表達式替換功能

ELSE regexp_replace(value, '^(.)(.*)(.)$', '1\22' 

但是,當value的長度為1時,其輸出會略有不同。

Case statment有許多syntex錯誤,您不能再次使用SET operation ,也不能使用separated replace

更改

1. SET value = UPPER(value)UPPER(value) 2. SET value = LOWER(value)LOWER(value)並3. remove像這樣的第二個replace

UPDATE t1  
SET value = 
CASE   WHEN value LIKE '%a%' THEN SET UPPER(value)   
       WHEN value LIKE '%d%' AND value NOT LIKE '%a' THEN LOWER(value)   
       ELSE REAPLACE(REPLACE(value,'_%','1'),'%_',2)
END
Where value IS NOT NULL; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM