Sql 替换函数的问题

Sql 替换函数的问题,sql,replace,db2,Sql,Replace,Db2,在我的一个结果集中,有一列包含char-data。我想创建另一列,其中包含第一列中修改过的数据。在那里,我想和oe交换所有的'ö' 我这样试过: Select NAME1, case when POSSTR(NAME1, 'ö') is not null then REPLACE(NAME1, 'ö', 'oe') end As __NAME1 from xyz; 结果失败了。我没有得到一个错误,但是没有被替换 我是否犯了错误,或者根本不可能执行此操作 谢谢! Patrick根

在我的一个结果集中,有一列包含char-data。我想创建另一列,其中包含第一列中修改过的数据。在那里,我想和oe交换所有的'ö'

我这样试过:

Select NAME1,
    case when POSSTR(NAME1, 'ö') is not null then REPLACE(NAME1, 'ö', 'oe')
    end As __NAME1
from xyz;
结果失败了。我没有得到一个错误,但是没有被替换

我是否犯了错误,或者根本不可能执行此操作

谢谢!
Patrick

根据DB2文档,如果找不到字符串,POSSTR将返回0(非NULL)。

如果希望第二列列出所有行,包括已更改的行和未更改的行,您只需使用:

Select 
    NAME1,
    REPLACE(NAME1, 'ö', 'oe') As __NAME1
from xyz;
您还可以测试以下内容:

Select 
    NAME1,
    REPLACE(NAME1, 'ö', 'oe') As __NAME1
from 
    xyz
where
    POSSTR(NAME1, 'ö') <> 0
选择
名称1,
将(名称1,'ö','oe')替换为_名称1
从…起
xyz
哪里
POSSTR(NAME1,'ö')0

您的实际问题似乎与您的问题标题不匹配,因为问题在于其中一个函数工作不正常,而不是您正在为它们创建名称。我遗漏了什么吗?您可以尝试在查询中添加POSSTR(NAME1,'ö')不为NULL的位置吗?这至少会告诉你哪个函数没有按预期工作。你对标题的看法是正确的。我更改了它。它在如下状态下运行:选择cu.NAME1,case-when(POSSTR(lower(cu.NAME1),'ö')0),然后'-------'ELSE'-'结束为CusName1,下面的查询没有错误,但ö也没有更改。我想我使用的replace函数有问题吧?当(POSSTR(lower(cu.NAME1),'ö')0)时,则替换(lower(cu.NAME1),'ö','oe'))