2017-10-11 82 views
1

我想在SQL中使用CASE語句更改列中的一串字符。 代碼如下替換CASE語句中的多個字符,SQL

CASE 
    WHEN [EmpName] LIKE '%æ%' 
     THEN REPLACE([EmpName], 'æ', 'ae') 

    WHEN [EmpName] LIKE '%ø%' 
     THEN REPLACE([EmpName], 'ø', 'oe') 

    WHEN [EmpName] LIKE '%å%' 
     THEN REPLACE([EmpName], 'å', 'aa') 

    WHEN [EmpName] LIKE '%-%' 
     THEN REPLACE([EmpName], '-', '') 

    ELSE [EmpName] 
END [EmpName (no special characters)] 

的問題是,如果一個名稱有不同的種類(如O和a)的多個字符,它只會只更換其中的一個(在case語句中的第一個那就是ø)。 有沒有辦法一次性替換CASE語句中的所有列出的字符?

謝謝!

+0

您使用MySQL,Oracle或MS SQL Server嗎?不要標記不涉及的產品。 – jarlh

+2

跳過大小寫表達式,嵌套替換就可以了。 – jarlh

+0

我可以使用任何這些,這就是爲什麼我做到了:) 它工作順便! 非常感謝你!!!!! –

回答

2

在這種情況下,CASE-WHEN構造是膚淺的。你只需要一個質量REPLACE,它看起來像這樣:

REPLACE(
    REPLACE(
    REPLACE(
     REPLACE([EmpName], 'æ', 'ae'), 
    'ø', 'oe'), 
    'å', 'aa'), 
'-', '') 

不幸的是,替換字符串有不同的尺寸比原來的。所以你不能在這裏使用TRANSLATE

+0

謝謝,它工作:) –