2017-10-11 44 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

谢谢,它工作:) –