[英]Oracle SQL- Update Query with Case Statement Missing Keyword Error
我對SQL非常陌生(從3天前開始學習),所以我假設我的代碼中存在一些可怕的語法錯誤。
從昨天開始,我一直在研究它,嘗試創建一個更新查詢,該查詢使用案例根據以下條件修改value
列:
value
包含字母“ a”時,將value大寫。 value
包含字母“ d”,但不包含字母“ a”,則將value
小寫。 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.