2017-02-28 26 views
0

我想以特定的方式更新表A中的第1列:當列中的第三個字符是「_」我想插入前2個字符,如果第三個字符anythin否則我想保留原樣。當第三個字符是「_」時更新

例子:

|col1|      
+--------+ 
|161_512 |  
|16_1217 | 
|161_512 |  
|161512 |   
|17_0117 | 
|1615_12 |   

預期成果:

|col1|      
+--------+ 
|161_512 |  
|16  | 
|161_512 |  
|161512 |   
|17  | 
|1615_12 |    

那是什麼從來就走到這一步 - 但這不能正常工作:

UPDATE table A SET col1 = CASE WHEN col1 LIKE '%_%' THEN ... ELSE col1; 

回答

4

如果你想匹配LIKE表達式中的文字下劃線,則需要使用反斜槓進行轉義。非轉義的下劃線表示匹配任何單個字符。但是,我會對您的查詢進行重新說明,以便它使用WHERE子句來確定是否更新給定的記錄。仔細這裏LIKE __\_%

UPDATE table A 
SET col1 = ... 
WHERE col1 LIKE '__\_%' 

注意任何兩個字符,然後是文字下劃線,其次是其他任何東西相匹配。

如果你覺得不舒服應付這一切,你總是可以使用一個子查詢的第三個字符的值:

UPDATE table A 
SET col1 = ... 
WHERE SUBSTRING(col1, 3, 1) = '_' 
+0

+1剛剛打敗了我。根據[文檔](https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html),「_」是一個匹配一個字符的通配符。 – Wiseguy

1

當列第三個字符是一個「 _「我想插入前2個字符

我不知道這是什麼意思。前兩個字符來自哪個屬性?你想在哪裏插入它們?

當列第三個字符是一個 「_」

這很簡單。正如你可能已經知道的那樣,下劃線字符是一個通配符,恰好匹配一個字符。因此,

LIKE '%_%' 

將匹配任何至少有一個字符的屬性。如果你明確要匹配下劃線,那麼你會逃脫下劃線

LIKE '%\_%' 

,並要求這是第三個字符,前執行2個單字符匹配:

LIKE '__\_%' 

( LIKE'_ _ \ _')

相關問題