2013-04-30 36 views
1

如何替换字符串的第12个字符,如果它等于'X' 例如,如果我有'ABXD1X354XJXOKJX';在这种情况下,我将用'Y'取代第12位的'X'。结果:“ABXD1X354XJYOKJX”替换字符串中的特定字符

我想用REGEXP_REPLACE功能点12字符,如果测试是等于“X”,如果是用“Y”代替它,但它比我想象的

回答

1

不知道更多的是如何构成的字符串,这应该工作:

-- matches: 
select regexp_replace('12dasdf32432Xasdasd', '([[:alnum:]]{11})(X{1})', '\1Y') from dual 
union 
-- doesn't match: 
select regexp_replace('12dasdf32432Zasdasd', '([[:alnum:]]{11})(X{1})', '\1Y') from dual 
+1

太好了,这正是我在找的东西,字符串是字母数字 – Djoz 2013-04-30 19:12:50

0

更复杂为此,使用SUBSTR函数可能会很容易。

实施例中,如果UPPER(SUBSTR( 'ABXD1X354XJYOKJX',12,1))= 'X'

1

可以这样做:

CASE SUBSTR(yourfield, 12, 1) WHEN 'X' THEN 'Y' END 

并添加根据需要级联

3

这你应该使用SUBSTR的工作:

select 
    substr('ABXD1X354XJXOKJX', 1, 11) || 
    case when substr('ABXD1X354XJXOKJX', 12, 1) = 'X' THEN 'Y' ELSE substr('ABXD1X354XJXOKJX', 12, 1) END || 
    substr('ABXD1X354XJXOKJX', 13) 
from dual 

SQL Fiddle Demo

+1

感谢那些工作!我认为有一种方法可以直接替换第12个字符,而不必连接 – Djoz 2013-04-30 19:05:24

+1

@DJozef - np,很高兴我能帮上忙!这可以用regexp_replace完成,但我认为这是一个更清洁的解决方案。 – sgeddes 2013-04-30 19:10:13